[{"data":1,"prerenderedAt":914},["ShallowReactive",2],{"navigation_docs":3,"-guide-cache":72,"-guide-cache-surround":909},[4,40],{"title":5,"path":6,"stem":7,"children":8,"icon":39},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"PURLs","\u002Fguide\u002Fpurl","1.guide\u002F2.purl",{"title":16,"path":17,"stem":18},"Lookups","\u002Fguide\u002Flookups","1.guide\u002F3.lookups",{"title":20,"path":21,"stem":22},"Caching","\u002Fguide\u002Fcache","1.guide\u002F4.cache",{"title":24,"path":25,"stem":26},"CLI","\u002Fguide\u002Fcli","1.guide\u002F5.cli",{"title":28,"path":29,"stem":30},"Agents","\u002Fguide\u002Fagents","1.guide\u002F6.agents",{"title":32,"path":33,"stem":34},"Custom Registries","\u002Fguide\u002Fcustom","1.guide\u002F7.custom",{"title":36,"path":37,"stem":38},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F8.explorer","i-lucide-book-open",{"title":41,"path":42,"stem":43,"children":44,"icon":71},"Registries","\u002Fregistries","2.registries\u002F0.index",[45,47,51,55,59,63,67],{"title":46,"path":42,"stem":43},"Overview",{"title":48,"path":49,"stem":50},"npm","\u002Fregistries\u002Fnpm","2.registries\u002F01.npm",{"title":52,"path":53,"stem":54},"crates.io","\u002Fregistries\u002Fcargo","2.registries\u002F02.cargo",{"title":56,"path":57,"stem":58},"PyPI","\u002Fregistries\u002Fpypi","2.registries\u002F03.pypi",{"title":60,"path":61,"stem":62},"RubyGems","\u002Fregistries\u002Frubygems","2.registries\u002F04.rubygems",{"title":64,"path":65,"stem":66},"Packagist","\u002Fregistries\u002Fpackagist","2.registries\u002F05.packagist",{"title":68,"path":69,"stem":70},"Arch Linux","\u002Fregistries\u002Falpm","2.registries\u002F06.alpm","i-lucide-library",{"id":73,"title":20,"body":74,"description":902,"extension":903,"links":904,"meta":905,"navigation":135,"path":21,"seo":907,"stem":22,"__hash__":908},"docs\u002F1.guide\u002F4.cache.md",{"type":75,"value":76,"toc":893},"minimark",[77,82,241,260,264,267,321,331,335,342,475,478,482,566,579,583,595,733,736,786,799,803,817,821,868,889],[78,79,81],"h2",{"id":80},"a-decorator-not-a-requirement","A decorator, not a requirement",[83,84,89],"pre",{"className":85,"code":86,"language":87,"meta":88,"style":88},"language-ts shiki shiki-themes github-light github-light poimandres","import { createCached } from \"@agntn\u002Fregistries\";\n\nconst npm = createCached(\"npm\");\n\nconst pkg = await npm.fetchPackage(\"lodash\"); \u002F\u002F hits the network, writes the cache\nconst same = await npm.fetchPackage(\"lodash\"); \u002F\u002F reads the cache while the entry is fresh\n","ts","",[90,91,92,130,137,166,171,210],"code",{"__ignoreMap":88},[93,94,97,101,105,109,112,116,120,124,127],"span",{"class":95,"line":96},"line",1,[93,98,100],{"class":99},"sP0CR","import",[93,102,104],{"class":103},"sKlNE"," {",[93,106,108],{"class":107},"snHMy"," createCached",[93,110,111],{"class":103}," }",[93,113,115],{"class":114},"stCPd"," from",[93,117,119],{"class":118},"scVjq"," \"",[93,121,123],{"class":122},"sQ7BG","@agntn\u002Fregistries",[93,125,126],{"class":118},"\"",[93,128,129],{"class":103},";\n",[93,131,133],{"class":95,"line":132},2,[93,134,136],{"emptyLinePlaceholder":135},true,"\n",[93,138,140,144,148,151,154,157,159,161,163],{"class":95,"line":139},3,[93,141,143],{"class":142},"s1TYA","const",[93,145,147],{"class":146},"saoiD"," npm",[93,149,150],{"class":142}," =",[93,152,108],{"class":153},"sULi6",[93,155,156],{"class":103},"(",[93,158,126],{"class":118},[93,160,48],{"class":122},[93,162,126],{"class":118},[93,164,165],{"class":103},");\n",[93,167,169],{"class":95,"line":168},4,[93,170,136],{"emptyLinePlaceholder":135},[93,172,174,176,179,181,185,188,191,194,196,198,201,203,206],{"class":95,"line":173},5,[93,175,143],{"class":142},[93,177,178],{"class":146}," pkg",[93,180,150],{"class":142},[93,182,184],{"class":183},"sZW6a"," await",[93,186,147],{"class":187},"spVlQ",[93,189,190],{"class":103},".",[93,192,193],{"class":153},"fetchPackage",[93,195,156],{"class":103},[93,197,126],{"class":118},[93,199,200],{"class":122},"lodash",[93,202,126],{"class":118},[93,204,205],{"class":103},"); ",[93,207,209],{"class":208},"sjhu3","\u002F\u002F hits the network, writes the cache\n",[93,211,213,215,218,220,222,224,226,228,230,232,234,236,238],{"class":95,"line":212},6,[93,214,143],{"class":142},[93,216,217],{"class":146}," same",[93,219,150],{"class":142},[93,221,184],{"class":183},[93,223,147],{"class":187},[93,225,190],{"class":103},[93,227,193],{"class":153},[93,229,156],{"class":103},[93,231,126],{"class":118},[93,233,200],{"class":122},[93,235,126],{"class":118},[93,237,205],{"class":103},[93,239,240],{"class":208},"\u002F\u002F reads the cache while the entry is fresh\n",[242,243,244,247,248,251,252,255,256,259],"p",{},[90,245,246],{},"createCached"," wraps a registry in ",[90,249,250],{},"CachedRegistry",", which has the same ",[90,253,254],{},"Registry"," shape, so anything that takes a registry takes a cached one. Nothing in the core path depends on the cache; the plain helpers never touch it. The CLI uses it unless ",[90,257,258],{},"--no-cache"," is passed.",[78,261,263],{"id":262},"where-it-lives","Where it lives",[242,265,266],{},"The default storage is the filesystem, under the platform cache directory:",[268,269,270,283],"table",{},[271,272,273],"thead",{},[274,275,276,280],"tr",{},[277,278,279],"th",{},"Platform",[277,281,282],{},"Directory",[284,285,286,301,311],"tbody",{},[274,287,288,292],{},[289,290,291],"td",{},"Linux and other XDG",[289,293,294,297,298],{},[90,295,296],{},"$XDG_CACHE_HOME\u002Fregistries",", else ",[90,299,300],{},"~\u002F.cache\u002Fregistries",[274,302,303,306],{},[289,304,305],{},"macOS",[289,307,308],{},[90,309,310],{},"~\u002FLibrary\u002FCaches\u002Fregistries",[274,312,313,316],{},[289,314,315],{},"Windows",[289,317,318],{},[90,319,320],{},"%LOCALAPPDATA%\\registries\\cache",[242,322,323,326,327,330],{},[90,324,325],{},"REGISTRIES_CACHE_DIR"," overrides all of them. ",[90,328,329],{},"registries cache path"," prints the resolved directory.",[78,332,334],{"id":333},"the-lockfile","The lockfile",[242,336,337,338,341],{},"Next to the cached values sits one lockfile that records, for every entry, the key, the data type, when it was fetched, its TTL, the latest version at the time for package entries, and a ",[90,339,340],{},"sha256-"," integrity hash of the stored JSON.",[83,343,345],{"className":85,"code":344,"language":87,"meta":88,"style":88},"interface LockfileEntry {\n  key: string; \u002F\u002F \"npm:lodash:package\", \"cargo:serde:dependencies:1.0.229\"\n  type: \"package\" | \"versions\" | \"dependencies\" | \"maintainers\";\n  fetchedAt: number;\n  ttl: number;\n  latestVersion?: string;\n  integrity: string;\n}\n",[90,346,347,359,378,422,434,445,457,469],{"__ignoreMap":88},[93,348,349,352,356],{"class":95,"line":96},[93,350,351],{"class":142},"interface",[93,353,355],{"class":354},"sCrqT"," LockfileEntry",[93,357,358],{"class":103}," {\n",[93,360,361,365,368,372,375],{"class":95,"line":132},[93,362,364],{"class":363},"s0VbO","  key",[93,366,367],{"class":142},":",[93,369,371],{"class":370},"s8yaW"," string",[93,373,374],{"class":103},"; ",[93,376,377],{"class":208},"\u002F\u002F \"npm:lodash:package\", \"cargo:serde:dependencies:1.0.229\"\n",[93,379,380,383,385,387,390,392,395,397,400,402,404,406,409,411,413,415,418,420],{"class":95,"line":139},[93,381,382],{"class":363},"  type",[93,384,367],{"class":142},[93,386,119],{"class":118},[93,388,389],{"class":122},"package",[93,391,126],{"class":118},[93,393,394],{"class":142}," |",[93,396,119],{"class":118},[93,398,399],{"class":122},"versions",[93,401,126],{"class":118},[93,403,394],{"class":142},[93,405,119],{"class":118},[93,407,408],{"class":122},"dependencies",[93,410,126],{"class":118},[93,412,394],{"class":142},[93,414,119],{"class":118},[93,416,417],{"class":122},"maintainers",[93,419,126],{"class":118},[93,421,129],{"class":103},[93,423,424,427,429,432],{"class":95,"line":168},[93,425,426],{"class":363},"  fetchedAt",[93,428,367],{"class":142},[93,430,431],{"class":370}," number",[93,433,129],{"class":103},[93,435,436,439,441,443],{"class":95,"line":173},[93,437,438],{"class":363},"  ttl",[93,440,367],{"class":142},[93,442,431],{"class":370},[93,444,129],{"class":103},[93,446,447,450,453,455],{"class":95,"line":212},[93,448,449],{"class":363},"  latestVersion",[93,451,452],{"class":142},"?:",[93,454,371],{"class":370},[93,456,129],{"class":103},[93,458,460,463,465,467],{"class":95,"line":459},7,[93,461,462],{"class":363},"  integrity",[93,464,367],{"class":142},[93,466,371],{"class":370},[93,468,129],{"class":103},[93,470,472],{"class":95,"line":471},8,[93,473,474],{"class":103},"}\n",[242,476,477],{},"A read checks the lockfile first. A missing or stale entry, or a stored value whose hash no longer matches, means a refetch. Concurrent reads of the same key without an abort signal share one pending request.",[78,479,481],{"id":480},"ttl-per-data-type","TTL per data type",[83,483,485],{"className":85,"code":484,"language":87,"meta":88,"style":88},"import { DEFAULT_TTL } from \"@agntn\u002Fregistries\";\n\nDEFAULT_TTL.package; \u002F\u002F 3600, one hour\nDEFAULT_TTL.versions; \u002F\u002F 1800, thirty minutes\nDEFAULT_TTL.dependencies; \u002F\u002F 86400, a day: the dependencies of one version never change\nDEFAULT_TTL.maintainers; \u002F\u002F 86400\n",[90,486,487,508,512,527,540,553],{"__ignoreMap":88},[93,488,489,491,493,496,498,500,502,504,506],{"class":95,"line":96},[93,490,100],{"class":99},[93,492,104],{"class":103},[93,494,495],{"class":107}," DEFAULT_TTL",[93,497,111],{"class":103},[93,499,115],{"class":114},[93,501,119],{"class":118},[93,503,123],{"class":122},[93,505,126],{"class":118},[93,507,129],{"class":103},[93,509,510],{"class":95,"line":132},[93,511,136],{"emptyLinePlaceholder":135},[93,513,514,518,520,522,524],{"class":95,"line":139},[93,515,517],{"class":516},"sqT1Y","DEFAULT_TTL",[93,519,190],{"class":103},[93,521,389],{"class":187},[93,523,374],{"class":103},[93,525,526],{"class":208},"\u002F\u002F 3600, one hour\n",[93,528,529,531,533,535,537],{"class":95,"line":168},[93,530,517],{"class":516},[93,532,190],{"class":103},[93,534,399],{"class":187},[93,536,374],{"class":103},[93,538,539],{"class":208},"\u002F\u002F 1800, thirty minutes\n",[93,541,542,544,546,548,550],{"class":95,"line":173},[93,543,517],{"class":516},[93,545,190],{"class":103},[93,547,408],{"class":187},[93,549,374],{"class":103},[93,551,552],{"class":208},"\u002F\u002F 86400, a day: the dependencies of one version never change\n",[93,554,555,557,559,561,563],{"class":95,"line":212},[93,556,517],{"class":516},[93,558,190],{"class":103},[93,560,417],{"class":187},[93,562,374],{"class":103},[93,564,565],{"class":208},"\u002F\u002F 86400\n",[242,567,568,569,572,573,578],{},"These constants live in one place, ",[90,570,571],{},"src\u002Fcache\u002Flockfile.ts",", and the docs worker behind the ",[574,575,577],"a",{"href":576},"\u002Flookup","Lookup"," explorer caches with the same values.",[78,580,582],{"id":581},"any-storage","Any storage",[242,584,585,587,588,594],{},[90,586,250],{}," is built on ",[574,589,593],{"href":590,"rel":591},"https:\u002F\u002Funstorage.unjs.io",[592],"nofollow","unstorage",". Configure a driver once and every cached registry uses it:",[83,596,598],{"className":85,"code":597,"language":87,"meta":88,"style":88},"import { configureStorage, createCached } from \"@agntn\u002Fregistries\";\nimport { createStorage } from \"unstorage\";\nimport cloudflareKVBindingDriver from \"unstorage\u002Fdrivers\u002Fcloudflare-kv-binding\";\n\nconfigureStorage(createStorage({ driver: cloudflareKVBindingDriver({ binding: \"REGISTRIES_CACHE\" }) }));\n\nconst npm = createCached(\"npm\");\n",[90,599,600,626,647,665,669,709,713],{"__ignoreMap":88},[93,601,602,604,606,609,612,614,616,618,620,622,624],{"class":95,"line":96},[93,603,100],{"class":99},[93,605,104],{"class":103},[93,607,608],{"class":107}," configureStorage",[93,610,611],{"class":103},",",[93,613,108],{"class":107},[93,615,111],{"class":103},[93,617,115],{"class":114},[93,619,119],{"class":118},[93,621,123],{"class":122},[93,623,126],{"class":118},[93,625,129],{"class":103},[93,627,628,630,632,635,637,639,641,643,645],{"class":95,"line":132},[93,629,100],{"class":99},[93,631,104],{"class":103},[93,633,634],{"class":107}," createStorage",[93,636,111],{"class":103},[93,638,115],{"class":114},[93,640,119],{"class":118},[93,642,593],{"class":122},[93,644,126],{"class":118},[93,646,129],{"class":103},[93,648,649,651,654,656,658,661,663],{"class":95,"line":139},[93,650,100],{"class":99},[93,652,653],{"class":107}," cloudflareKVBindingDriver",[93,655,115],{"class":114},[93,657,119],{"class":118},[93,659,660],{"class":122},"unstorage\u002Fdrivers\u002Fcloudflare-kv-binding",[93,662,126],{"class":118},[93,664,129],{"class":103},[93,666,667],{"class":95,"line":168},[93,668,136],{"emptyLinePlaceholder":135},[93,670,671,674,676,679,682,685,687,689,691,694,696,698,701,703,706],{"class":95,"line":173},[93,672,673],{"class":153},"configureStorage",[93,675,156],{"class":103},[93,677,678],{"class":153},"createStorage",[93,680,681],{"class":103},"({",[93,683,684],{"class":107}," driver",[93,686,367],{"class":103},[93,688,653],{"class":153},[93,690,681],{"class":103},[93,692,693],{"class":107}," binding",[93,695,367],{"class":103},[93,697,119],{"class":118},[93,699,700],{"class":122},"REGISTRIES_CACHE",[93,702,126],{"class":118},[93,704,705],{"class":103}," })",[93,707,708],{"class":103}," }));\n",[93,710,711],{"class":95,"line":212},[93,712,136],{"emptyLinePlaceholder":135},[93,714,715,717,719,721,723,725,727,729,731],{"class":95,"line":459},[93,716,143],{"class":142},[93,718,147],{"class":146},[93,720,150],{"class":142},[93,722,108],{"class":153},[93,724,156],{"class":103},[93,726,126],{"class":118},[93,728,48],{"class":122},[93,730,126],{"class":118},[93,732,165],{"class":103},[242,734,735],{},"Or pass a storage to one registry only:",[83,737,739],{"className":85,"code":738,"language":87,"meta":88,"style":88},"const npm = createCached(\"npm\", { storage: createStorage({ driver: memoryDriver() }) });\n",[90,740,741],{"__ignoreMap":88},[93,742,743,745,747,749,751,753,755,757,759,762,765,767,769,771,773,775,778,781,783],{"class":95,"line":96},[93,744,143],{"class":142},[93,746,147],{"class":146},[93,748,150],{"class":142},[93,750,108],{"class":153},[93,752,156],{"class":103},[93,754,126],{"class":118},[93,756,48],{"class":122},[93,758,126],{"class":118},[93,760,761],{"class":103},", {",[93,763,764],{"class":107}," storage",[93,766,367],{"class":103},[93,768,634],{"class":153},[93,770,681],{"class":103},[93,772,684],{"class":107},[93,774,367],{"class":103},[93,776,777],{"class":153}," memoryDriver",[93,779,780],{"class":103},"()",[93,782,705],{"class":103},[93,784,785],{"class":103}," });\n",[242,787,788,790,791,794,795,798],{},[90,789,246],{}," also takes ",[90,792,793],{},"baseURL"," and ",[90,796,797],{},"client",", which go to the inner adapter.",[78,800,802],{"id":801},"dates-through-the-cache","Dates through the cache",[242,804,805,808,809,812,813,816],{},[90,806,807],{},"Version.publishedAt"," is a ",[90,810,811],{},"Date",". JSON storage turns it into a string on the way in; ",[90,814,815],{},"CachedRegistry.fetchVersions"," revives it on the way out, so a cached version list is indistinguishable from a fresh one.",[78,818,820],{"id":819},"housekeeping","Housekeeping",[83,822,826],{"className":823,"code":824,"language":825,"meta":88,"style":88},"language-bash shiki shiki-themes github-light github-light poimandres","registries cache status # entries, fresh and stale, grouped by ecosystem\nregistries cache prune # drop stale entries from the lockfile\nregistries cache clear # drop everything\n","bash",[90,827,828,844,856],{"__ignoreMap":88},[93,829,830,834,838,841],{"class":95,"line":96},[93,831,833],{"class":832},"sseY5","registries",[93,835,837],{"class":836},"sX7Zv"," cache",[93,839,840],{"class":836}," status",[93,842,843],{"class":208}," # entries, fresh and stale, grouped by ecosystem\n",[93,845,846,848,850,853],{"class":95,"line":132},[93,847,833],{"class":832},[93,849,837],{"class":836},[93,851,852],{"class":836}," prune",[93,854,855],{"class":208}," # drop stale entries from the lockfile\n",[93,857,858,860,862,865],{"class":95,"line":139},[93,859,833],{"class":832},[93,861,837],{"class":836},[93,863,864],{"class":836}," clear",[93,866,867],{"class":208}," # drop everything\n",[242,869,870,871,874,875,874,878,874,881,884,885,888],{},"The same operations exist as functions: ",[90,872,873],{},"readLockfile",", ",[90,876,877],{},"pruneStale",[90,879,880],{},"writeLockfile",[90,882,883],{},"clearStorage",". ",[90,886,887],{},"disposeStorage"," closes the driver on process exit.",[890,891,892],"style",{},"html pre.shiki code .sP0CR, html code.shiki .sP0CR{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7}html pre.shiki code .sKlNE, html code.shiki .sKlNE{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#A6ACCD}html pre.shiki code .snHMy, html code.shiki .snHMy{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#ADD7FF}html pre.shiki code .stCPd, html code.shiki .stCPd{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#A6ACCD}html pre.shiki code .scVjq, html code.shiki .scVjq{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#A6ACCD}html pre.shiki code .sQ7BG, html code.shiki .sQ7BG{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#5DE4C7}html pre.shiki code .s1TYA, html code.shiki .s1TYA{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#91B4D5}html pre.shiki code .saoiD, html code.shiki .saoiD{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#E4F0FB}html pre.shiki code .sULi6, html code.shiki .sULi6{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#E4F0FBD0}html pre.shiki code .sZW6a, html code.shiki .sZW6a{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#5DE4C7C0}html pre.shiki code .spVlQ, html code.shiki .spVlQ{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E4F0FB}html pre.shiki code .sjhu3, html code.shiki .sjhu3{--shiki-light:#6A737D;--shiki-light-font-style:inherit;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#767C9DB0;--shiki-dark-font-style:italic}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 .sCrqT, html code.shiki .sCrqT{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#A6ACCDC0}html pre.shiki code .s0VbO, html code.shiki .s0VbO{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#A6ACCD}html pre.shiki code .s8yaW, html code.shiki .s8yaW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#A6ACCDC0}html pre.shiki code .sqT1Y, html code.shiki .sqT1Y{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#ADD7FF}html pre.shiki code .sseY5, html code.shiki .sseY5{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#91B4D5}html pre.shiki code .sX7Zv, html code.shiki .sX7Zv{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#ADD7FF}",{"title":88,"searchDepth":132,"depth":132,"links":894},[895,896,897,898,899,900,901],{"id":80,"depth":132,"text":81},{"id":262,"depth":132,"text":263},{"id":333,"depth":132,"text":334},{"id":480,"depth":132,"text":481},{"id":581,"depth":132,"text":582},{"id":801,"depth":132,"text":802},{"id":819,"depth":132,"text":820},"The optional cache decorator, its lockfile, the TTL per data type, and how to put it on any unstorage driver.","md",null,{"icon":906},"i-lucide-database",{"title":20,"description":902},"n-pzRi88lYbZcIqPjXXxhyExICMbam37yRBS7TvH5g8",[910,912],{"title":16,"path":17,"stem":18,"description":911,"children":-1},"Package, versions, dependencies and maintainers, what each returns, and what changes between registries.",{"title":24,"path":25,"stem":26,"description":913,"children":-1},"The registries command, its four lookups, the cache subcommands, and the flags.",1788462725129]