[{"data":1,"prerenderedAt":1017},["ShallowReactive",2],{"navigation":3,"-jwk-cache":167,"-jwk-cache-surround":1014},[4,22,78,106,141,148],{"title":5,"path":6,"stem":7,"children":8},"Introduction","\u002Fgetting-started","0.Getting-Started\u002F0.index",[9,10,14,18],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Installation","\u002Fgetting-started\u002Finstallation","0.Getting-Started\u002F1.installation",{"title":15,"path":16,"stem":17},"Quickstart","\u002Fgetting-started\u002Fquickstart","0.Getting-Started\u002F2.quickstart",{"title":19,"path":20,"stem":21},"Core concepts","\u002Fgetting-started\u002Fcore-concepts","0.Getting-Started\u002F3.core-concepts",{"title":23,"path":24,"stem":25,"children":26,"icon":28},"JWT","\u002Fjwt","1.JWT\u002F0.index",[27,29,52],{"title":23,"path":24,"stem":25,"icon":28},"i-carbon-certificate",{"title":30,"path":31,"stem":32,"children":33,"icon":35},"JWS","\u002Fjwt\u002Fjws","1.JWT\u002F1.JWS\u002F0.index",[34,36,40,44,48],{"title":30,"path":31,"stem":32,"icon":35},"i-carbon-document-signed",{"title":37,"path":38,"stem":39},"Signing","\u002Fjwt\u002Fjws\u002Fsigning","1.JWT\u002F1.JWS\u002F1.signing",{"title":41,"path":42,"stem":43},"Verifying","\u002Fjwt\u002Fjws\u002Fverifying","1.JWT\u002F1.JWS\u002F2.verifying",{"title":45,"path":46,"stem":47},"Multi-signature","\u002Fjwt\u002Fjws\u002Fmulti-signature","1.JWT\u002F1.JWS\u002F3.multi-signature",{"title":49,"path":50,"stem":51},"Algorithms","\u002Fjwt\u002Fjws\u002Falgorithms","1.JWT\u002F1.JWS\u002F4.algorithms",{"title":53,"path":54,"stem":55,"children":56,"icon":58},"JWE","\u002Fjwt\u002Fjwe","1.JWT\u002F2.JWE\u002F0.index",[57,59,63,67,71,75],{"title":53,"path":54,"stem":55,"icon":58},"i-carbon-locked",{"title":60,"path":61,"stem":62},"Encrypting","\u002Fjwt\u002Fjwe\u002Fencrypting","1.JWT\u002F2.JWE\u002F1.encrypting",{"title":64,"path":65,"stem":66},"Decrypting","\u002Fjwt\u002Fjwe\u002Fdecrypting","1.JWT\u002F2.JWE\u002F2.decrypting",{"title":68,"path":69,"stem":70},"Multi-recipient","\u002Fjwt\u002Fjwe\u002Fmulti-recipient","1.JWT\u002F2.JWE\u002F3.multi-recipient",{"title":72,"path":73,"stem":74},"ECDH-ES and end-to-end encryption","\u002Fjwt\u002Fjwe\u002Fecdh-es","1.JWT\u002F2.JWE\u002F4.ecdh-es",{"title":49,"path":76,"stem":77},"\u002Fjwt\u002Fjwe\u002Falgorithms","1.JWT\u002F2.JWE\u002F5.algorithms",{"title":79,"path":80,"stem":81,"children":82,"icon":84},"Examples","\u002Fexamples","10.Examples\u002F0.index",[83,85,90,94,98,102],{"title":79,"path":80,"stem":81,"icon":84},"i-carbon-code-reference",{"title":86,"path":87,"stem":88,"icon":89},"Authentication basics","\u002Fexamples\u002Fauthentication-basics","10.Examples\u002F1.authentication-basics","i-lucide-code",{"title":91,"path":92,"stem":93,"icon":89},"Consuming a JWKS endpoint","\u002Fexamples\u002Fjwks-endpoint","10.Examples\u002F2.jwks-endpoint",{"title":95,"path":96,"stem":97,"icon":89},"Refresh token pattern","\u002Fexamples\u002Frefresh-token-pattern","10.Examples\u002F3.refresh-token-pattern",{"title":99,"path":100,"stem":101,"icon":89},"End-to-end encryption","\u002Fexamples\u002Fend-to-end-encryption","10.Examples\u002F4.end-to-end-encryption",{"title":103,"path":104,"stem":105,"icon":89},"Signed receipts","\u002Fexamples\u002Fsigned-receipts","10.Examples\u002F5.signed-receipts",{"title":107,"path":108,"stem":109,"children":110,"icon":112},"JWK","\u002Fjwk","2.JWK\u002F0.index",[111,113,117,121,125,129,133,137],{"title":107,"path":108,"stem":109,"icon":112},"i-carbon-two-factor-authentication",{"title":114,"path":115,"stem":116},"Generating keys","\u002Fjwk\u002Fgenerating","2.JWK\u002F1.generating",{"title":118,"path":119,"stem":120},"Importing and exporting","\u002Fjwk\u002Fimport-export","2.JWK\u002F2.import-export",{"title":122,"path":123,"stem":124},"PEM conversion","\u002Fjwk\u002Fpem","2.JWK\u002F3.pem",{"title":126,"path":127,"stem":128},"Key wrapping","\u002Fjwk\u002Fwrapping","2.JWK\u002F4.wrapping",{"title":130,"path":131,"stem":132},"Password derivation","\u002Fjwk\u002Fpassword-derivation","2.JWK\u002F5.password-derivation",{"title":134,"path":135,"stem":136},"JWK Sets","\u002Fjwk\u002Fjwk-sets","2.JWK\u002F6.jwk-sets",{"title":138,"path":139,"stem":140},"JWK cache","\u002Fjwk\u002Fcache","2.JWK\u002F7.cache",{"title":142,"path":143,"stem":144,"children":145,"icon":147},"Utilities","\u002Futilities","3.Utilities\u002F0.index",[146],{"title":142,"path":143,"stem":144,"icon":147},"i-carbon-tool-box",{"title":149,"path":150,"stem":151,"children":152,"icon":154},"Adapters","\u002Fadapters","99.Adapters\u002F0.index",[153,155,159,163],{"title":149,"path":150,"stem":151,"icon":154},"i-carbon-plug",{"title":156,"path":157,"stem":158},"H3 sessions","\u002Fadapters\u002Fh3-sessions","99.Adapters\u002F1.h3-sessions",{"title":160,"path":161,"stem":162},"Lifecycle hooks","\u002Fadapters\u002Fhooks","99.Adapters\u002F2.hooks",{"title":164,"path":165,"stem":166},"Lower-level functions","\u002Fadapters\u002Flower-level","99.Adapters\u002F3.lower-level",{"id":168,"title":138,"body":169,"description":218,"extension":1009,"meta":1010,"navigation":1011,"path":139,"seo":1012,"stem":140,"__hash__":1013},"content\u002F2.JWK\u002F7.cache.md",{"type":170,"value":171,"toc":998},"minimark",[172,200,212,244,249,259,295,301,378,392,398,401,595,600,603,699,705,709,732,736,758,763,792,802,807,810,962,977,981,994],[173,174,175,176,180,181,180,184,187,188,191,192,195,196,199],"p",{},"Every time ",[177,178,179],"code",{},"sign()",", ",[177,182,183],{},"verify()",[177,185,186],{},"encrypt()",", or ",[177,189,190],{},"decrypt()"," touches a JWK, unjwt must call ",[177,193,194],{},"crypto.subtle.importKey"," to produce a ",[177,197,198],{},"CryptoKey",". That import is not free — especially for RSA keys, where parsing modulus and exponent takes a few milliseconds.",[173,201,202,203,207,208,211],{},"To avoid paying that cost on every call, unjwt keeps a small ",[204,205,206],"strong",{},"per-JWK cache",". By default, it's a ",[177,209,210],{},"WeakMap"," keyed by the JWK object reference; no tuning required.",[213,214,219],"pre",{"className":215,"code":216,"language":217,"meta":218,"style":218},"language-ts shiki shiki-themes github-light github-dark github-dark","import { configureJWKCache, clearJWKCache, WeakMapJWKCache } from \"unjwt\u002Fjwk\";\n","ts","",[177,220,221],{"__ignoreMap":218},[222,223,226,230,234,237,241],"span",{"class":224,"line":225},"line",1,[222,227,229],{"class":228},"so5gQ","import",[222,231,233],{"class":232},"slsVL"," { configureJWKCache, clearJWKCache, WeakMapJWKCache } ",[222,235,236],{"class":228},"from",[222,238,240],{"class":239},"sfrk1"," \"unjwt\u002Fjwk\"",[222,242,243],{"class":232},";\n",[245,246,248],"h2",{"id":247},"how-it-works-the-default","How it works — the default",[173,250,251,254,255,258],{},[177,252,253],{},"WeakMapJWKCache"," stores ",[177,256,257],{},"WeakMap\u003CJWK, Record\u003Cstring, CryptoKey>>",":",[260,261,262,269,286],"ul",{},[263,264,265,268],"li",{},[204,266,267],{},"Outer key"," — the JWK object reference itself.",[263,270,271,274,275,278,279,180,282,285],{},[204,272,273],{},"Inner key"," — the algorithm string passed to ",[177,276,277],{},"importKey"," (e.g. ",[177,280,281],{},"\"HS256\"",[177,283,284],{},"\"RS256\"",").",[263,287,288,291,292,294],{},[204,289,290],{},"Value"," — the resulting ",[177,293,198],{},".",[173,296,297,298,300],{},"Because the outer map is a ",[177,299,210],{},", the cache entry is garbage-collected automatically when the JWK object becomes unreachable. No manual invalidation needed.",[213,302,304],{"className":215,"code":303,"language":217,"meta":218,"style":218},"\u002F\u002F First call: imports, caches\nawait verify(token, myJwk);\n\n\u002F\u002F Second call with SAME object: cache hit, skip import\nawait verify(token2, myJwk);\n\n\u002F\u002F With a copy: CACHE MISS — different object reference\nawait verify(token3, { ...myJwk }); \u002F\u002F re-imports\n",[177,305,306,312,325,332,338,348,353,359],{"__ignoreMap":218},[222,307,308],{"class":224,"line":225},[222,309,311],{"class":310},"sCsY4","\u002F\u002F First call: imports, caches\n",[222,313,315,318,322],{"class":224,"line":314},2,[222,316,317],{"class":228},"await",[222,319,321],{"class":320},"shcOC"," verify",[222,323,324],{"class":232},"(token, myJwk);\n",[222,326,328],{"class":224,"line":327},3,[222,329,331],{"emptyLinePlaceholder":330},true,"\n",[222,333,335],{"class":224,"line":334},4,[222,336,337],{"class":310},"\u002F\u002F Second call with SAME object: cache hit, skip import\n",[222,339,341,343,345],{"class":224,"line":340},5,[222,342,317],{"class":228},[222,344,321],{"class":320},[222,346,347],{"class":232},"(token2, myJwk);\n",[222,349,351],{"class":224,"line":350},6,[222,352,331],{"emptyLinePlaceholder":330},[222,354,356],{"class":224,"line":355},7,[222,357,358],{"class":310},"\u002F\u002F With a copy: CACHE MISS — different object reference\n",[222,360,362,364,366,369,372,375],{"class":224,"line":361},8,[222,363,317],{"class":228},[222,365,321],{"class":320},[222,367,368],{"class":232},"(token3, { ",[222,370,371],{"class":228},"...",[222,373,374],{"class":232},"myJwk }); ",[222,376,377],{"class":310},"\u002F\u002F re-imports\n",[379,380,381],"warning",{},[173,382,383,384,387,388,391],{},"Cache hits require the ",[204,385,386],{},"same object variable"," to be passed. A spread copy (",[177,389,390],{},"{ ...jwk }",") or a JSON.parse of a stringified JWK produces a new object and misses the cache. For predictable hits, keep one JWK object per key and reuse the reference.",[245,393,395],{"id":394},"configurejwkcache",[177,396,397],{},"configureJWKCache",[173,399,400],{},"Replace or disable the active cache:",[213,402,405],{"className":215,"code":403,"filename":404,"language":217,"meta":218,"style":218},"import { configureJWKCache } from \"unjwt\u002Fjwk\";\n\n\u002F\u002F Custom kid-keyed cache with LRU semantics\nconst map = new Map\u003Cstring, CryptoKey>();\nconfigureJWKCache({\n  get: (jwk, alg) => map.get(`${jwk.kid}:${alg}`),\n  set: (jwk, alg, key) => map.set(`${jwk.kid}:${alg}`, key),\n});\n\n\u002F\u002F Disable caching entirely\nconfigureJWKCache(false);\n","custom.ts",[177,406,407,420,424,429,460,467,520,566,571,576,582],{"__ignoreMap":218},[222,408,409,411,414,416,418],{"class":224,"line":225},[222,410,229],{"class":228},[222,412,413],{"class":232}," { configureJWKCache } ",[222,415,236],{"class":228},[222,417,240],{"class":239},[222,419,243],{"class":232},[222,421,422],{"class":224,"line":314},[222,423,331],{"emptyLinePlaceholder":330},[222,425,426],{"class":224,"line":327},[222,427,428],{"class":310},"\u002F\u002F Custom kid-keyed cache with LRU semantics\n",[222,430,431,434,438,441,444,447,450,453,455,457],{"class":224,"line":334},[222,432,433],{"class":228},"const",[222,435,437],{"class":436},"suiK_"," map",[222,439,440],{"class":228}," =",[222,442,443],{"class":228}," new",[222,445,446],{"class":320}," Map",[222,448,449],{"class":232},"\u003C",[222,451,452],{"class":436},"string",[222,454,180],{"class":232},[222,456,198],{"class":320},[222,458,459],{"class":232},">();\n",[222,461,462,464],{"class":224,"line":340},[222,463,397],{"class":320},[222,465,466],{"class":232},"({\n",[222,468,469,472,475,479,481,484,487,490,493,496,499,502,504,506,509,512,514,517],{"class":224,"line":350},[222,470,471],{"class":320},"  get",[222,473,474],{"class":232},": (",[222,476,478],{"class":477},"sQHwn","jwk",[222,480,180],{"class":232},[222,482,483],{"class":477},"alg",[222,485,486],{"class":232},") ",[222,488,489],{"class":228},"=>",[222,491,492],{"class":232}," map.",[222,494,495],{"class":320},"get",[222,497,498],{"class":232},"(",[222,500,501],{"class":239},"`${",[222,503,478],{"class":232},[222,505,294],{"class":239},[222,507,508],{"class":232},"kid",[222,510,511],{"class":239},"}:${",[222,513,483],{"class":232},[222,515,516],{"class":239},"}`",[222,518,519],{"class":232},"),\n",[222,521,522,525,527,529,531,533,535,538,540,542,544,547,549,551,553,555,557,559,561,563],{"class":224,"line":355},[222,523,524],{"class":320},"  set",[222,526,474],{"class":232},[222,528,478],{"class":477},[222,530,180],{"class":232},[222,532,483],{"class":477},[222,534,180],{"class":232},[222,536,537],{"class":477},"key",[222,539,486],{"class":232},[222,541,489],{"class":228},[222,543,492],{"class":232},[222,545,546],{"class":320},"set",[222,548,498],{"class":232},[222,550,501],{"class":239},[222,552,478],{"class":232},[222,554,294],{"class":239},[222,556,508],{"class":232},[222,558,511],{"class":239},[222,560,483],{"class":232},[222,562,516],{"class":239},[222,564,565],{"class":232},", key),\n",[222,567,568],{"class":224,"line":361},[222,569,570],{"class":232},"});\n",[222,572,574],{"class":224,"line":573},9,[222,575,331],{"emptyLinePlaceholder":330},[222,577,579],{"class":224,"line":578},10,[222,580,581],{"class":310},"\u002F\u002F Disable caching entirely\n",[222,583,585,587,589,592],{"class":224,"line":584},11,[222,586,397],{"class":320},[222,588,498],{"class":232},[222,590,591],{"class":436},"false",[222,593,594],{"class":232},");\n",[596,597,599],"h3",{"id":598},"the-adapter-interface","The adapter interface",[173,601,602],{},"Any object matching this shape is accepted:",[213,604,606],{"className":215,"code":605,"language":217,"meta":218,"style":218},"interface JWKCacheAdapter {\n  get(jwk: JWK, alg: string): CryptoKey | undefined;\n  set(jwk: JWK, alg: string, key: CryptoKey): void;\n}\n",[177,607,608,619,657,694],{"__ignoreMap":218},[222,609,610,613,616],{"class":224,"line":225},[222,611,612],{"class":228},"interface",[222,614,615],{"class":320}," JWKCacheAdapter",[222,617,618],{"class":232}," {\n",[222,620,621,623,625,627,629,632,634,636,638,641,644,646,649,652,655],{"class":224,"line":314},[222,622,471],{"class":320},[222,624,498],{"class":232},[222,626,478],{"class":477},[222,628,258],{"class":228},[222,630,631],{"class":320}," JWK",[222,633,180],{"class":232},[222,635,483],{"class":477},[222,637,258],{"class":228},[222,639,640],{"class":436}," string",[222,642,643],{"class":232},")",[222,645,258],{"class":228},[222,647,648],{"class":320}," CryptoKey",[222,650,651],{"class":228}," |",[222,653,654],{"class":436}," undefined",[222,656,243],{"class":232},[222,658,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,692],{"class":224,"line":327},[222,660,524],{"class":320},[222,662,498],{"class":232},[222,664,478],{"class":477},[222,666,258],{"class":228},[222,668,631],{"class":320},[222,670,180],{"class":232},[222,672,483],{"class":477},[222,674,258],{"class":228},[222,676,640],{"class":436},[222,678,180],{"class":232},[222,680,537],{"class":477},[222,682,258],{"class":228},[222,684,648],{"class":320},[222,686,643],{"class":232},[222,688,258],{"class":228},[222,690,691],{"class":436}," void",[222,693,243],{"class":232},[222,695,696],{"class":224,"line":334},[222,697,698],{"class":232},"}\n",[173,700,701,702,704],{},"No TTL, no delete — cache invalidation is up to the adapter. The default implementation leans on JavaScript's garbage collector via ",[177,703,210],{},"; an LRU or Redis-backed version would need its own eviction strategy.",[596,706,708],{"id":707},"when-to-replace","When to replace",[260,710,711,720,726],{},[263,712,713,716,717,719],{},[204,714,715],{},"You parse JWKs from strings on every request"," — the default ",[177,718,210],{}," cache misses, so a kid-keyed map gives you real hits again.",[263,721,722,725],{},[204,723,724],{},"Multi-tenant environments"," — an LRU bound prevents unbounded memory growth in long-lived processes.",[263,727,728,731],{},[204,729,730],{},"Distributed workers"," — a shared (Redis, etc.) cache lets you amortize imports across a pool.",[596,733,735],{"id":734},"when-to-disable","When to disable",[260,737,738,744],{},[263,739,740,743],{},[204,741,742],{},"Memory-constrained environments"," where the cache outweighs the wins.",[263,745,746,749,750,757],{},[204,747,748],{},"Tests",", especially when you want each test's imports to be observable (but see ",[751,752,754],"a",{"href":753},"#clearjwkcache",[177,755,756],{},"clearJWKCache"," below — usually sufficient).",[245,759,761],{"id":760},"clearjwkcache",[177,762,756],{},[213,764,766],{"className":215,"code":765,"language":217,"meta":218,"style":218},"import { clearJWKCache } from \"unjwt\u002Fjwk\";\n\nclearJWKCache();\n",[177,767,768,781,785],{"__ignoreMap":218},[222,769,770,772,775,777,779],{"class":224,"line":225},[222,771,229],{"class":228},[222,773,774],{"class":232}," { clearJWKCache } ",[222,776,236],{"class":228},[222,778,240],{"class":239},[222,780,243],{"class":232},[222,782,783],{"class":224,"line":314},[222,784,331],{"emptyLinePlaceholder":330},[222,786,787,789],{"class":224,"line":327},[222,788,756],{"class":320},[222,790,791],{"class":232},"();\n",[173,793,794,795,797,798,801],{},"Resets the cache to a fresh ",[177,796,253],{},". Mostly used in tests to ensure no cross-test key memoization. Call it in ",[177,799,800],{},"beforeEach"," if your tests re-use JWK objects across runs.",[245,803,805],{"id":804},"weakmapjwkcache",[177,806,253],{},[173,808,809],{},"The default implementation, exported for reference:",[213,811,813],{"className":215,"code":812,"language":217,"meta":218,"style":218},"export class WeakMapJWKCache implements JWKCacheAdapter {\n  private cache = new WeakMap\u003CJWK, Record\u003Cstring, CryptoKey>>();\n\n  get(jwk: JWK, alg: string): CryptoKey | undefined {\n    \u002F* ... *\u002F\n  }\n  set(jwk: JWK, alg: string, key: CryptoKey): void {\n    \u002F* ... *\u002F\n  }\n}\n",[177,814,815,833,868,872,904,909,914,950,954,958],{"__ignoreMap":218},[222,816,817,820,823,826,829,831],{"class":224,"line":225},[222,818,819],{"class":228},"export",[222,821,822],{"class":228}," class",[222,824,825],{"class":320}," WeakMapJWKCache",[222,827,828],{"class":228}," implements",[222,830,615],{"class":320},[222,832,618],{"class":232},[222,834,835,838,841,843,845,848,850,852,854,857,859,861,863,865],{"class":224,"line":314},[222,836,837],{"class":228},"  private",[222,839,840],{"class":477}," cache",[222,842,440],{"class":228},[222,844,443],{"class":228},[222,846,847],{"class":320}," WeakMap",[222,849,449],{"class":232},[222,851,107],{"class":320},[222,853,180],{"class":232},[222,855,856],{"class":320},"Record",[222,858,449],{"class":232},[222,860,452],{"class":436},[222,862,180],{"class":232},[222,864,198],{"class":320},[222,866,867],{"class":232},">>();\n",[222,869,870],{"class":224,"line":327},[222,871,331],{"emptyLinePlaceholder":330},[222,873,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902],{"class":224,"line":334},[222,875,471],{"class":320},[222,877,498],{"class":232},[222,879,478],{"class":477},[222,881,258],{"class":228},[222,883,631],{"class":320},[222,885,180],{"class":232},[222,887,483],{"class":477},[222,889,258],{"class":228},[222,891,640],{"class":436},[222,893,643],{"class":232},[222,895,258],{"class":228},[222,897,648],{"class":320},[222,899,651],{"class":228},[222,901,654],{"class":436},[222,903,618],{"class":232},[222,905,906],{"class":224,"line":340},[222,907,908],{"class":310},"    \u002F* ... *\u002F\n",[222,910,911],{"class":224,"line":350},[222,912,913],{"class":232},"  }\n",[222,915,916,918,920,922,924,926,928,930,932,934,936,938,940,942,944,946,948],{"class":224,"line":355},[222,917,524],{"class":320},[222,919,498],{"class":232},[222,921,478],{"class":477},[222,923,258],{"class":228},[222,925,631],{"class":320},[222,927,180],{"class":232},[222,929,483],{"class":477},[222,931,258],{"class":228},[222,933,640],{"class":436},[222,935,180],{"class":232},[222,937,537],{"class":477},[222,939,258],{"class":228},[222,941,648],{"class":320},[222,943,643],{"class":232},[222,945,258],{"class":228},[222,947,691],{"class":436},[222,949,618],{"class":232},[222,951,952],{"class":224,"line":361},[222,953,908],{"class":310},[222,955,956],{"class":224,"line":573},[222,957,913],{"class":232},[222,959,960],{"class":224,"line":578},[222,961,698],{"class":232},[173,963,964,965,968,969,972,973,976],{},"Internally it uses ",[177,966,967],{},"Record\u003Cstring, CryptoKey>"," instead of ",[177,970,971],{},"Map\u003Cstring, CryptoKey>"," for the per-JWK bucket — plain objects are slightly faster than ",[177,974,975],{},"Map"," for the typical 1–2 algorithm entries per key (V8 hidden-class optimization).",[245,978,980],{"id":979},"see-also","See also",[260,982,983,988],{},[263,984,985],{},[751,986,987],{"href":119},"Importing & exporting →",[263,989,990,993],{},[751,991,992],{"href":135},"JWK Sets →"," — complementary for managing many keys.",[995,996,997],"style",{},"html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}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 .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}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}",{"title":218,"searchDepth":314,"depth":314,"links":999},[1000,1001,1006,1007,1008],{"id":247,"depth":314,"text":248},{"id":394,"depth":314,"text":397,"children":1002},[1003,1004,1005],{"id":598,"depth":327,"text":599},{"id":707,"depth":327,"text":708},{"id":734,"depth":327,"text":735},{"id":760,"depth":314,"text":756},{"id":804,"depth":314,"text":253},{"id":979,"depth":314,"text":980},"md",{},{},{"title":138,"description":218},"gxPOmB-R_jeL2SQac2DbQWt3zih01CytBj3iui2sywM",[1015,1016],{"title":134,"path":135,"stem":136,"description":218,"children":-1},{"title":142,"path":143,"stem":144,"description":218,"icon":147,"children":-1},1776888559438]