[{"data":1,"prerenderedAt":1108},["ShallowReactive",2],{"navigation":3,"-guide-storage":57,"-guide-storage-surround":1105},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":16},"Guide","\u002Fguide","1.guide\u002F1.index",[9,12,17,22,27,32,37,42,47,52],{"title":10,"path":6,"stem":7,"icon":11},"Getting Started","lucide:rocket",{"title":13,"path":14,"stem":15,"icon":16},"API Reference","\u002Fguide\u002Fapi","1.guide\u002F10.api","lucide:book-open",{"title":18,"path":19,"stem":20,"icon":21},"Caching Functions","\u002Fguide\u002Ffunctions","1.guide\u002F2.functions","lucide:square-function",{"title":23,"path":24,"stem":25,"icon":26},"Invalidation & Expiration","\u002Fguide\u002Finvalidation","1.guide\u002F3.invalidation","lucide:trash-2",{"title":28,"path":29,"stem":30,"icon":31},"Storage","\u002Fguide\u002Fstorage","1.guide\u002F4.storage","lucide:database",{"title":33,"path":34,"stem":35,"icon":36},"Caching HTTP Handlers","\u002Fguide\u002Fhandler","1.guide\u002F5.handler","lucide:server",{"title":38,"path":39,"stem":40,"icon":41},"Query Parameters","\u002Fguide\u002Fquery-params","1.guide\u002F6.query-params","lucide:link-2",{"title":43,"path":44,"stem":45,"icon":46},"Cookies","\u002Fguide\u002Fcookies","1.guide\u002F7.cookies","lucide:cookie",{"title":48,"path":49,"stem":50,"icon":51},"Cache-Control & Eligibility","\u002Fguide\u002Fcache-control","1.guide\u002F8.cache-control","lucide:sliders-horizontal",{"title":53,"path":54,"stem":55,"icon":56},"Incremental Static Regeneration","\u002Fguide\u002Fisr","1.guide\u002F9.isr","lucide:refresh-cw",{"id":58,"title":28,"body":59,"description":97,"extension":1100,"meta":1101,"navigation":1102,"path":29,"seo":1103,"stem":30,"__hash__":1104},"content\u002F1.guide\u002F4.storage.md",{"type":60,"value":61,"toc":1094,"icon":31},"minimark",[62,75,80,91,255,308,312,319,607,618,799,807,811,822,837,904,910,914,925,944,1078,1085,1090],[63,64,65,66,70,71,74],"p",{},"Every cached function and handler reads and writes through a single global storage instance. By default that's an in-memory ",[67,68,69],"code",{},"Map",", but you can replace it with any backend that implements the minimal ",[67,72,73],{},"StorageInterface",".",[76,77,79],"h2",{"id":78},"the-storage-interface","The Storage Interface",[63,81,82,83,86,87,90],{},"A storage only needs two methods, ",[67,84,85],{},"get"," and ",[67,88,89],{},"set",". Both may be synchronous or return a promise:",[92,93,98],"pre",{"className":94,"code":95,"language":96,"meta":97,"style":97},"language-ts shiki shiki-themes github-light github-dark github-dark","interface StorageInterface {\n  get\u003CT = unknown>(key: string): T | null | Promise\u003CT | null>;\n  set\u003CT = unknown>(key: string, value: T, opts?: { ttl?: number }): void | Promise\u003Cvoid>;\n}\n","ts","",[67,99,100,117,179,249],{"__ignoreMap":97},[101,102,105,109,113],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"so5gQ","interface",[101,110,112],{"class":111},"shcOC"," StorageInterface",[101,114,116],{"class":115},"slsVL"," {\n",[101,118,120,123,126,129,132,136,139,143,146,149,152,154,157,160,163,165,168,170,172,174,176],{"class":103,"line":119},2,[101,121,122],{"class":111},"  get",[101,124,125],{"class":115},"\u003C",[101,127,128],{"class":111},"T",[101,130,131],{"class":107}," =",[101,133,135],{"class":134},"suiK_"," unknown",[101,137,138],{"class":115},">(",[101,140,142],{"class":141},"sQHwn","key",[101,144,145],{"class":107},":",[101,147,148],{"class":134}," string",[101,150,151],{"class":115},")",[101,153,145],{"class":107},[101,155,156],{"class":111}," T",[101,158,159],{"class":107}," |",[101,161,162],{"class":134}," null",[101,164,159],{"class":107},[101,166,167],{"class":111}," Promise",[101,169,125],{"class":115},[101,171,128],{"class":111},[101,173,159],{"class":107},[101,175,162],{"class":134},[101,177,178],{"class":115},">;\n",[101,180,182,185,187,189,191,193,195,197,199,201,204,207,209,211,213,216,219,222,225,227,230,233,235,238,240,242,244,247],{"class":103,"line":181},3,[101,183,184],{"class":111},"  set",[101,186,125],{"class":115},[101,188,128],{"class":111},[101,190,131],{"class":107},[101,192,135],{"class":134},[101,194,138],{"class":115},[101,196,142],{"class":141},[101,198,145],{"class":107},[101,200,148],{"class":134},[101,202,203],{"class":115},", ",[101,205,206],{"class":141},"value",[101,208,145],{"class":107},[101,210,156],{"class":111},[101,212,203],{"class":115},[101,214,215],{"class":141},"opts",[101,217,218],{"class":107},"?:",[101,220,221],{"class":115}," { ",[101,223,224],{"class":141},"ttl",[101,226,218],{"class":107},[101,228,229],{"class":134}," number",[101,231,232],{"class":115}," })",[101,234,145],{"class":107},[101,236,237],{"class":134}," void",[101,239,159],{"class":107},[101,241,167],{"class":111},[101,243,125],{"class":115},[101,245,246],{"class":134},"void",[101,248,178],{"class":115},[101,250,252],{"class":103,"line":251},4,[101,253,254],{"class":115},"}\n",[256,257,258,269,284],"ul",{},[259,260,261,264,265,268],"li",{},[67,262,263],{},"get(key)"," returns the stored value, or ",[67,266,267],{},"null"," when the key is missing.",[259,270,271,274,275,278,279,283],{},[67,272,273],{},"set(key, value, opts)"," stores a value. ",[67,276,277],{},"opts.ttl"," is a lifetime in ",[280,281,282],"strong",{},"seconds"," (optional).",[259,285,286,287,290,291,293,294,297,298,300,301,304,305,307],{},"Setting a ",[280,288,289],{},"nullish"," value (",[67,292,267],{}," or ",[67,295,296],{},"undefined",") via ",[67,299,89],{}," ",[280,302,303],{},"deletes"," the entry. This is how invalidation reaches your backend, so make sure your ",[67,306,89],{}," handles it.",[76,309,311],{"id":310},"custom-storage","Custom Storage",[63,313,314,315,318],{},"Use ",[67,316,317],{},"setStorage"," to swap in your own backend. Here it is backed by Redis:",[92,320,322],{"className":94,"code":321,"language":96,"meta":97,"style":97},"import { setStorage } from \"ocache\";\nimport type { StorageInterface } from \"ocache\";\n\nconst redisStorage: StorageInterface = {\n  async get(key) {\n    const raw = await redis.get(key);\n    return raw === null ? null : JSON.parse(raw);\n  },\n  async set(key, value, opts) {\n    \u002F\u002F A nullish value means \"delete this entry\" (used by invalidation).\n    if (value === null || value === undefined) {\n      await redis.del(key);\n      return;\n    }\n    \u002F\u002F opts.ttl is in seconds — Redis' EX option expects seconds too.\n    await redis.set(key, JSON.stringify(value), opts?.ttl ? { EX: opts.ttl } : undefined);\n  },\n};\n\nsetStorage(redisStorage);\n",[67,323,324,342,358,364,380,397,419,452,458,480,487,513,526,534,540,546,583,588,594,599],{"__ignoreMap":97},[101,325,326,329,332,335,339],{"class":103,"line":104},[101,327,328],{"class":107},"import",[101,330,331],{"class":115}," { setStorage } ",[101,333,334],{"class":107},"from",[101,336,338],{"class":337},"sfrk1"," \"ocache\"",[101,340,341],{"class":115},";\n",[101,343,344,346,349,352,354,356],{"class":103,"line":119},[101,345,328],{"class":107},[101,347,348],{"class":107}," type",[101,350,351],{"class":115}," { StorageInterface } ",[101,353,334],{"class":107},[101,355,338],{"class":337},[101,357,341],{"class":115},[101,359,360],{"class":103,"line":181},[101,361,363],{"emptyLinePlaceholder":362},true,"\n",[101,365,366,369,372,374,376,378],{"class":103,"line":251},[101,367,368],{"class":107},"const",[101,370,371],{"class":134}," redisStorage",[101,373,145],{"class":107},[101,375,112],{"class":111},[101,377,131],{"class":107},[101,379,116],{"class":115},[101,381,383,386,389,392,394],{"class":103,"line":382},5,[101,384,385],{"class":107},"  async",[101,387,388],{"class":111}," get",[101,390,391],{"class":115},"(",[101,393,142],{"class":141},[101,395,396],{"class":115},") {\n",[101,398,400,403,406,408,411,414,416],{"class":103,"line":399},6,[101,401,402],{"class":107},"    const",[101,404,405],{"class":134}," raw",[101,407,131],{"class":107},[101,409,410],{"class":107}," await",[101,412,413],{"class":115}," redis.",[101,415,85],{"class":111},[101,417,418],{"class":115},"(key);\n",[101,420,422,425,428,431,433,436,438,441,444,446,449],{"class":103,"line":421},7,[101,423,424],{"class":107},"    return",[101,426,427],{"class":115}," raw ",[101,429,430],{"class":107},"===",[101,432,162],{"class":134},[101,434,435],{"class":107}," ?",[101,437,162],{"class":134},[101,439,440],{"class":107}," :",[101,442,443],{"class":134}," JSON",[101,445,74],{"class":115},[101,447,448],{"class":111},"parse",[101,450,451],{"class":115},"(raw);\n",[101,453,455],{"class":103,"line":454},8,[101,456,457],{"class":115},"  },\n",[101,459,461,463,466,468,470,472,474,476,478],{"class":103,"line":460},9,[101,462,385],{"class":107},[101,464,465],{"class":111}," set",[101,467,391],{"class":115},[101,469,142],{"class":141},[101,471,203],{"class":115},[101,473,206],{"class":141},[101,475,203],{"class":115},[101,477,215],{"class":141},[101,479,396],{"class":115},[101,481,483],{"class":103,"line":482},10,[101,484,486],{"class":485},"sCsY4","    \u002F\u002F A nullish value means \"delete this entry\" (used by invalidation).\n",[101,488,490,493,496,498,500,503,506,508,511],{"class":103,"line":489},11,[101,491,492],{"class":107},"    if",[101,494,495],{"class":115}," (value ",[101,497,430],{"class":107},[101,499,162],{"class":134},[101,501,502],{"class":107}," ||",[101,504,505],{"class":115}," value ",[101,507,430],{"class":107},[101,509,510],{"class":134}," undefined",[101,512,396],{"class":115},[101,514,516,519,521,524],{"class":103,"line":515},12,[101,517,518],{"class":107},"      await",[101,520,413],{"class":115},[101,522,523],{"class":111},"del",[101,525,418],{"class":115},[101,527,529,532],{"class":103,"line":528},13,[101,530,531],{"class":107},"      return",[101,533,341],{"class":115},[101,535,537],{"class":103,"line":536},14,[101,538,539],{"class":115},"    }\n",[101,541,543],{"class":103,"line":542},15,[101,544,545],{"class":485},"    \u002F\u002F opts.ttl is in seconds — Redis' EX option expects seconds too.\n",[101,547,549,552,554,556,559,562,564,567,570,573,576,578,580],{"class":103,"line":548},16,[101,550,551],{"class":107},"    await",[101,553,413],{"class":115},[101,555,89],{"class":111},[101,557,558],{"class":115},"(key, ",[101,560,561],{"class":134},"JSON",[101,563,74],{"class":115},[101,565,566],{"class":111},"stringify",[101,568,569],{"class":115},"(value), opts?.ttl ",[101,571,572],{"class":107},"?",[101,574,575],{"class":115}," { EX: opts.ttl } ",[101,577,145],{"class":107},[101,579,510],{"class":134},[101,581,582],{"class":115},");\n",[101,584,586],{"class":103,"line":585},17,[101,587,457],{"class":115},[101,589,591],{"class":103,"line":590},18,[101,592,593],{"class":115},"};\n",[101,595,597],{"class":103,"line":596},19,[101,598,363],{"emptyLinePlaceholder":362},[101,600,602,604],{"class":103,"line":601},20,[101,603,317],{"class":111},[101,605,606],{"class":115},"(redisStorage);\n",[63,608,609,610,617],{},"Because the interface is so small, ",[611,612,616],"a",{"href":613,"rel":614},"https:\u002F\u002Funstorage.unjs.io",[615],"nofollow","unstorage"," drivers (filesystem, Cloudflare KV, S3, Redis, and many more) drop in with a thin adapter:",[92,619,621],{"className":94,"code":620,"language":96,"meta":97,"style":97},"import { setStorage } from \"ocache\";\nimport { createStorage } from \"unstorage\";\nimport redisDriver from \"unstorage\u002Fdrivers\u002Fredis\";\n\nconst storage = createStorage({ driver: redisDriver({\u002F* ... *\u002F}) });\n\nsetStorage({\n  get: (key) => storage.getItem(key),\n  set: (key, value, opts) =>\n    value === null || value === undefined\n      ? storage.removeItem(key)\n      : storage.setItem(key, value, { ttl: opts?.ttl }),\n});\n",[67,622,623,635,649,663,667,694,698,705,729,750,768,781,794],{"__ignoreMap":97},[101,624,625,627,629,631,633],{"class":103,"line":104},[101,626,328],{"class":107},[101,628,331],{"class":115},[101,630,334],{"class":107},[101,632,338],{"class":337},[101,634,341],{"class":115},[101,636,637,639,642,644,647],{"class":103,"line":119},[101,638,328],{"class":107},[101,640,641],{"class":115}," { createStorage } ",[101,643,334],{"class":107},[101,645,646],{"class":337}," \"unstorage\"",[101,648,341],{"class":115},[101,650,651,653,656,658,661],{"class":103,"line":181},[101,652,328],{"class":107},[101,654,655],{"class":115}," redisDriver ",[101,657,334],{"class":107},[101,659,660],{"class":337}," \"unstorage\u002Fdrivers\u002Fredis\"",[101,662,341],{"class":115},[101,664,665],{"class":103,"line":251},[101,666,363],{"emptyLinePlaceholder":362},[101,668,669,671,674,676,679,682,685,688,691],{"class":103,"line":382},[101,670,368],{"class":107},[101,672,673],{"class":134}," storage",[101,675,131],{"class":107},[101,677,678],{"class":111}," createStorage",[101,680,681],{"class":115},"({ driver: ",[101,683,684],{"class":111},"redisDriver",[101,686,687],{"class":115},"({",[101,689,690],{"class":485},"\u002F* ... *\u002F",[101,692,693],{"class":115},"}) });\n",[101,695,696],{"class":103,"line":399},[101,697,363],{"emptyLinePlaceholder":362},[101,699,700,702],{"class":103,"line":421},[101,701,317],{"class":111},[101,703,704],{"class":115},"({\n",[101,706,707,709,712,714,717,720,723,726],{"class":103,"line":454},[101,708,122],{"class":111},[101,710,711],{"class":115},": (",[101,713,142],{"class":141},[101,715,716],{"class":115},") ",[101,718,719],{"class":107},"=>",[101,721,722],{"class":115}," storage.",[101,724,725],{"class":111},"getItem",[101,727,728],{"class":115},"(key),\n",[101,730,731,733,735,737,739,741,743,745,747],{"class":103,"line":460},[101,732,184],{"class":111},[101,734,711],{"class":115},[101,736,142],{"class":141},[101,738,203],{"class":115},[101,740,206],{"class":141},[101,742,203],{"class":115},[101,744,215],{"class":141},[101,746,716],{"class":115},[101,748,749],{"class":107},"=>\n",[101,751,752,755,757,759,761,763,765],{"class":103,"line":482},[101,753,754],{"class":115},"    value ",[101,756,430],{"class":107},[101,758,162],{"class":134},[101,760,502],{"class":107},[101,762,505],{"class":115},[101,764,430],{"class":107},[101,766,767],{"class":134}," undefined\n",[101,769,770,773,775,778],{"class":103,"line":489},[101,771,772],{"class":107},"      ?",[101,774,722],{"class":115},[101,776,777],{"class":111},"removeItem",[101,779,780],{"class":115},"(key)\n",[101,782,783,786,788,791],{"class":103,"line":515},[101,784,785],{"class":107},"      :",[101,787,722],{"class":115},[101,789,790],{"class":111},"setItem",[101,792,793],{"class":115},"(key, value, { ttl: opts?.ttl }),\n",[101,795,796],{"class":103,"line":528},[101,797,798],{"class":115},"});\n",[800,801,802],"note",{},[63,803,804,806],{},[67,805,317],{}," replaces the storage globally — every cached function and handler uses it. Call it once at startup, before your first cached call.",[76,808,810],{"id":809},"memory-storage-lru","Memory Storage & LRU",[63,812,813,814,817,818,821],{},"The built-in storage is created with ",[67,815,816],{},"createMemoryStorage",". It keeps at most ",[280,819,820],{},"10 000"," entries by default, evicting the least-recently-used entries once the ceiling is exceeded (LRU). Reading or writing a key marks it as most-recently-used.",[63,823,824,825,828,829,832,833,836],{},"Pass ",[67,826,827],{},"maxSize"," to change the ceiling, or set it to ",[67,830,831],{},"Infinity"," (or ",[67,834,835],{},"0",") to disable eviction and grow unbounded:",[92,838,840],{"className":94,"code":839,"language":96,"meta":97,"style":97},"import { createMemoryStorage, setStorage } from \"ocache\";\n\n\u002F\u002F Change the entry ceiling.\nsetStorage(createMemoryStorage({ maxSize: 50_000 }));\n\n\u002F\u002F Opt out of the ceiling entirely.\nsetStorage(createMemoryStorage({ maxSize: Infinity }));\n",[67,841,842,855,859,864,881,885,890],{"__ignoreMap":97},[101,843,844,846,849,851,853],{"class":103,"line":104},[101,845,328],{"class":107},[101,847,848],{"class":115}," { createMemoryStorage, setStorage } ",[101,850,334],{"class":107},[101,852,338],{"class":337},[101,854,341],{"class":115},[101,856,857],{"class":103,"line":119},[101,858,363],{"emptyLinePlaceholder":362},[101,860,861],{"class":103,"line":181},[101,862,863],{"class":485},"\u002F\u002F Change the entry ceiling.\n",[101,865,866,868,870,872,875,878],{"class":103,"line":251},[101,867,317],{"class":111},[101,869,391],{"class":115},[101,871,816],{"class":111},[101,873,874],{"class":115},"({ maxSize: ",[101,876,877],{"class":134},"50_000",[101,879,880],{"class":115}," }));\n",[101,882,883],{"class":103,"line":382},[101,884,363],{"emptyLinePlaceholder":362},[101,886,887],{"class":103,"line":399},[101,888,889],{"class":485},"\u002F\u002F Opt out of the ceiling entirely.\n",[101,891,892,894,896,898,900,902],{"class":103,"line":421},[101,893,317],{"class":111},[101,895,391],{"class":115},[101,897,816],{"class":111},[101,899,874],{"class":115},[101,901,831],{"class":134},[101,903,880],{"class":115},[63,905,906,907,909],{},"Memory storage also honors the per-entry TTL: expired entries return ",[67,908,267],{}," and are cleaned up automatically.",[76,911,913],{"id":912},"multi-tier-caching","Multi-tier Caching",[63,915,916,917,920,921,924],{},"The ",[67,918,919],{},"base"," option prefixes cache keys. Pass an ",[280,922,923],{},"array"," of prefixes to enable multi-tier caching:",[256,926,927,933],{},[259,928,929,932],{},[280,930,931],{},"On read",", each prefix is tried in order and the first hit wins.",[259,934,935,938,939,943],{},[280,936,937],{},"On write",", the entry is stored under ",[940,941,942],"em",{},"every"," prefix.",[92,945,947],{"className":94,"code":946,"language":96,"meta":97,"style":97},"import { defineCachedFunction } from \"ocache\";\n\nconst cachedFetch = defineCachedFunction(\n  async (url: string) => {\n    const res = await fetch(url);\n    return res.json();\n  },\n  {\n    maxAge: 60,\n    base: [\"\u002Flocal\", \"\u002Fremote\"], \u002F\u002F read \"\u002Flocal\" first, then \"\u002Fremote\"; write both\n  },\n);\n",[67,948,949,962,966,981,1001,1018,1031,1035,1040,1051,1070,1074],{"__ignoreMap":97},[101,950,951,953,956,958,960],{"class":103,"line":104},[101,952,328],{"class":107},[101,954,955],{"class":115}," { defineCachedFunction } ",[101,957,334],{"class":107},[101,959,338],{"class":337},[101,961,341],{"class":115},[101,963,964],{"class":103,"line":119},[101,965,363],{"emptyLinePlaceholder":362},[101,967,968,970,973,975,978],{"class":103,"line":181},[101,969,368],{"class":107},[101,971,972],{"class":134}," cachedFetch",[101,974,131],{"class":107},[101,976,977],{"class":111}," defineCachedFunction",[101,979,980],{"class":115},"(\n",[101,982,983,985,988,991,993,995,997,999],{"class":103,"line":251},[101,984,385],{"class":107},[101,986,987],{"class":115}," (",[101,989,990],{"class":141},"url",[101,992,145],{"class":107},[101,994,148],{"class":134},[101,996,716],{"class":115},[101,998,719],{"class":107},[101,1000,116],{"class":115},[101,1002,1003,1005,1008,1010,1012,1015],{"class":103,"line":382},[101,1004,402],{"class":107},[101,1006,1007],{"class":134}," res",[101,1009,131],{"class":107},[101,1011,410],{"class":107},[101,1013,1014],{"class":111}," fetch",[101,1016,1017],{"class":115},"(url);\n",[101,1019,1020,1022,1025,1028],{"class":103,"line":399},[101,1021,424],{"class":107},[101,1023,1024],{"class":115}," res.",[101,1026,1027],{"class":111},"json",[101,1029,1030],{"class":115},"();\n",[101,1032,1033],{"class":103,"line":421},[101,1034,457],{"class":115},[101,1036,1037],{"class":103,"line":454},[101,1038,1039],{"class":115},"  {\n",[101,1041,1042,1045,1048],{"class":103,"line":460},[101,1043,1044],{"class":115},"    maxAge: ",[101,1046,1047],{"class":134},"60",[101,1049,1050],{"class":115},",\n",[101,1052,1053,1056,1059,1061,1064,1067],{"class":103,"line":482},[101,1054,1055],{"class":115},"    base: [",[101,1057,1058],{"class":337},"\"\u002Flocal\"",[101,1060,203],{"class":115},[101,1062,1063],{"class":337},"\"\u002Fremote\"",[101,1065,1066],{"class":115},"], ",[101,1068,1069],{"class":485},"\u002F\u002F read \"\u002Flocal\" first, then \"\u002Fremote\"; write both\n",[101,1071,1072],{"class":103,"line":489},[101,1073,457],{"class":115},[101,1075,1076],{"class":103,"line":515},[101,1077,582],{"class":115},[63,1079,1080,1081,1084],{},"This suits layered setups (e.g. a fast local tier in front of a shared remote tier): reads prefer the nearest tier while every tier stays populated on writes. A single string (the default is ",[67,1082,1083],{},"\"\u002Fcache\"",") keeps everything in one tier.",[63,1086,1087,1088,74],{},"Invalidation and expiration operate across all tiers — see ",[611,1089,23],{"href":24},[1091,1092,1093],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}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 .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":97,"searchDepth":119,"depth":119,"links":1095},[1096,1097,1098,1099],{"id":78,"depth":119,"text":79},{"id":310,"depth":119,"text":311},{"id":809,"depth":119,"text":810},{"id":912,"depth":119,"text":913},"md",{"icon":31},{"icon":31},{"title":28,"description":97},"nRxVBA0MkV_V63yChpD13692c5YTuWYiOW8_3pFYd4U",[1106,1107],{"title":23,"path":24,"stem":25,"description":97,"icon":26,"children":-1},{"title":33,"path":34,"stem":35,"description":97,"icon":36,"children":-1},1783601179225]