[{"data":1,"prerenderedAt":2234},["ShallowReactive",2],{"navigation":3,"-guide":137,"-guide-surround":2230},[4,26],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Getting Started","\u002Fguide","1.guide\u002F1.index",[9,11,16,21],{"title":5,"path":6,"stem":7,"icon":10},"ph:book-open-duotone",{"title":12,"path":13,"stem":14,"icon":15},"Utilities","\u002Fguide\u002Futils","1.guide\u002F2.utils","et:tools-2",{"title":17,"path":18,"stem":19,"icon":20},"HTTP Server","\u002Fguide\u002Fhttp-server","1.guide\u002F3.http-server","ic:baseline-http",{"title":22,"path":23,"stem":24,"icon":25},"Custom Driver","\u002Fguide\u002Fcustom-driver","1.guide\u002F4.custom-driver","carbon:area-custom",{"title":27,"path":28,"stem":29,"children":30,"icon":32},"Drivers","\u002Fdrivers","2.drivers\u002F0.index",[31,33,38,43,48,53,58,63,68,73,77,82,87,92,97,102,107,112,117,122,127,132],{"title":27,"path":28,"stem":29,"icon":32},"icon-park-outline:hard-disk",{"title":34,"path":35,"stem":36,"icon":37},"Azure","\u002Fdrivers\u002Fazure","2.drivers\u002Fazure","mdi:microsoft-azure",{"title":39,"path":40,"stem":41,"icon":42},"Browser","\u002Fdrivers\u002Fbrowser","2.drivers\u002Fbrowser","ph:browser-thin",{"title":44,"path":45,"stem":46,"icon":47},"Capacitor Preferences","\u002Fdrivers\u002Fcapacitor-preferences","2.drivers\u002Fcapacitor-preferences","nonicons:capacitor-16",{"title":49,"path":50,"stem":51,"icon":52},"Cloudflare","\u002Fdrivers\u002Fcloudflare","2.drivers\u002Fcloudflare","devicon-plain:cloudflareworkers",{"title":54,"path":55,"stem":56,"icon":57},"SQL Database","\u002Fdrivers\u002Fdatabase","2.drivers\u002Fdatabase","ph:database",{"title":59,"path":60,"stem":61,"icon":62},"Deno KV","\u002Fdrivers\u002Fdeno","2.drivers\u002Fdeno","simple-icons:deno",{"title":64,"path":65,"stem":66,"icon":67},"Filesystem (Node.js)","\u002Fdrivers\u002Ffs","2.drivers\u002Ffs","ph:file-light",{"title":69,"path":70,"stem":71,"icon":72},"GitHub","\u002Fdrivers\u002Fgithub","2.drivers\u002Fgithub","mdi:github",{"title":74,"path":75,"stem":76,"icon":20},"HTTP","\u002Fdrivers\u002Fhttp","2.drivers\u002Fhttp",{"title":78,"path":79,"stem":80,"icon":81},"LRU Cache","\u002Fdrivers\u002Flru-cache","2.drivers\u002Flru-cache","material-symbols:cached-rounded",{"title":83,"path":84,"stem":85,"icon":86},"Memory","\u002Fdrivers\u002Fmemory","2.drivers\u002Fmemory","bi:memory",{"title":88,"path":89,"stem":90,"icon":91},"MongoDB","\u002Fdrivers\u002Fmongodb","2.drivers\u002Fmongodb","teenyicons:mongodb-outline",{"title":93,"path":94,"stem":95,"icon":96},"Netlify Blobs","\u002Fdrivers\u002Fnetlify","2.drivers\u002Fnetlify","teenyicons:netlify-solid",{"title":98,"path":99,"stem":100,"icon":101},"Null","\u002Fdrivers\u002Fnull","2.drivers\u002Fnull","bi:trash3-fill",{"title":103,"path":104,"stem":105,"icon":106},"Overlay","\u002Fdrivers\u002Foverlay","2.drivers\u002Foverlay","carbon:overlay",{"title":108,"path":109,"stem":110,"icon":111},"PlanetScale","\u002Fdrivers\u002Fplanetscale","2.drivers\u002Fplanetscale","simple-icons:planetscale",{"title":113,"path":114,"stem":115,"icon":116},"Redis","\u002Fdrivers\u002Fredis","2.drivers\u002Fredis","simple-icons:redis",{"title":118,"path":119,"stem":120,"icon":121},"S3","\u002Fdrivers\u002Fs3","2.drivers\u002Fs3","simple-icons:amazons3",{"title":123,"path":124,"stem":125,"icon":126},"UploadThing","\u002Fdrivers\u002Fuploadthing","2.drivers\u002Fuploadthing","qlementine-icons:cloud-16",{"title":128,"path":129,"stem":130,"icon":131},"Upstash","\u002Fdrivers\u002Fupstash","2.drivers\u002Fupstash","simple-icons:upstash",{"title":133,"path":134,"stem":135,"icon":136},"Vercel","\u002Fdrivers\u002Fvercel","2.drivers\u002Fvercel","gg:vercel",{"id":138,"title":5,"body":139,"description":2224,"extension":2225,"meta":2226,"navigation":2227,"path":6,"seo":2228,"stem":7,"__hash__":2229},"content\u002F1.guide\u002F1.index.md",{"type":140,"value":141,"toc":2196,"icon":10},"minimark",[142,147,151,155,169,172,176,271,277,291,295,302,313,333,340,359,365,371,390,395,414,420,423,430,436,442,454,457,491,497,500,503,513,539,544,567,573,576,586,590,596,603,606,614,660,666,669,700,709,742,748,751,754,766,789,795,802,832,838,843,868,874,877,883,886,903,908,923,929,932,948,954,957,962,977,983,986,993,1008,1158,1164,1167,1187,1193,1200,1254,1260,1263,1278,1284,1287,1346,1352,1355,1472,1476,1484,1542,1550,1651,1656,1740,1746,1795,1804,1967,1982,2019,2024,2192],[143,144,146],"h2",{"id":145},"introduction","Introduction",[148,149,150],"p",{},"We usually choose one or more storage backends based on our use cases, such as the filesystem, a database, or LocalStorage for browsers. It soon starts to create troubles when supporting and combining multiple options or switching between them. For JavaScript library authors, this usually means that they have to decide how many platforms they are going to support and implement storage for each of them.",[143,152,154],{"id":153},"installation","Installation",[148,156,157,158,168],{},"Install ",[159,160,164],"a",{"href":161,"rel":162},"https:\u002F\u002Fnpmjs.com\u002Fpackage\u002Funstorage",[163],"nofollow",[165,166,167],"code",{},"unstorage"," npm package:",[170,171],"pm-install",{"name":167},[143,173,175],{"id":174},"usage","Usage",[177,178,184],"pre",{"className":179,"code":180,"filename":181,"language":182,"meta":183,"style":183},"language-js shiki shiki-themes github-light github-dark github-dark","import { createStorage } from \"unstorage\";\n\nconst storage = createStorage(\u002F* opts *\u002F);\n\nawait storage.getItem(\"foo:bar\"); \u002F\u002F or storage.getItem('\u002Ffoo\u002Fbar')\n","my-storage.js","js","",[165,185,186,209,216,243,248],{"__ignoreMap":183},[187,188,191,195,199,202,206],"span",{"class":189,"line":190},"line",1,[187,192,194],{"class":193},"so5gQ","import",[187,196,198],{"class":197},"slsVL"," { createStorage } ",[187,200,201],{"class":193},"from",[187,203,205],{"class":204},"sfrk1"," \"unstorage\"",[187,207,208],{"class":197},";\n",[187,210,212],{"class":189,"line":211},2,[187,213,215],{"emptyLinePlaceholder":214},true,"\n",[187,217,219,222,226,229,233,236,240],{"class":189,"line":218},3,[187,220,221],{"class":193},"const",[187,223,225],{"class":224},"suiK_"," storage",[187,227,228],{"class":193}," =",[187,230,232],{"class":231},"shcOC"," createStorage",[187,234,235],{"class":197},"(",[187,237,239],{"class":238},"sCsY4","\u002F* opts *\u002F",[187,241,242],{"class":197},");\n",[187,244,246],{"class":189,"line":245},4,[187,247,215],{"emptyLinePlaceholder":214},[187,249,251,254,257,260,262,265,268],{"class":189,"line":250},5,[187,252,253],{"class":193},"await",[187,255,256],{"class":197}," storage.",[187,258,259],{"class":231},"getItem",[187,261,235],{"class":197},[187,263,264],{"class":204},"\"foo:bar\"",[187,266,267],{"class":197},"); ",[187,269,270],{"class":238},"\u002F\u002F or storage.getItem('\u002Ffoo\u002Fbar')\n",[148,272,273],{},[274,275,276],"strong",{},"Options:",[278,279,280],"ul",{},[281,282,283,286,287,290],"li",{},[165,284,285],{},"driver",": Default driver, using ",[159,288,289],{"href":84},"memory"," if not provided",[143,292,294],{"id":293},"interface","Interface",[296,297,299],"h3",{"id":298},"hasitemkey-opts",[165,300,301],{},"hasItem(key, opts?)",[148,303,304,305,308,309,312],{},"Checks if storage contains a key. Resolves to either ",[165,306,307],{},"true"," or ",[165,310,311],{},"false",".",[177,314,316],{"className":179,"code":315,"language":182,"meta":183,"style":183},"await storage.hasItem(\"foo:bar\");\n",[165,317,318],{"__ignoreMap":183},[187,319,320,322,324,327,329,331],{"class":189,"line":190},[187,321,253],{"class":193},[187,323,256],{"class":197},[187,325,326],{"class":231},"hasItem",[187,328,235],{"class":197},[187,330,264],{"class":204},[187,332,242],{"class":197},[148,334,335,336,339],{},"You can also use the ",[165,337,338],{},"has"," alias:",[177,341,343],{"className":179,"code":342,"language":182,"meta":183,"style":183},"await storage.has(\"foo:bar\");\n",[165,344,345],{"__ignoreMap":183},[187,346,347,349,351,353,355,357],{"class":189,"line":190},[187,348,253],{"class":193},[187,350,256],{"class":197},[187,352,338],{"class":231},[187,354,235],{"class":197},[187,356,264],{"class":204},[187,358,242],{"class":197},[296,360,362],{"id":361},"getitemkey-opts",[165,363,364],{},"getItem(key, opts?)",[148,366,367,368,312],{},"Gets the value of a key in storage. Resolves to either a JavaScript primitive value or ",[165,369,370],{},"null",[177,372,374],{"className":179,"code":373,"language":182,"meta":183,"style":183},"await storage.getItem(\"foo:bar\");\n",[165,375,376],{"__ignoreMap":183},[187,377,378,380,382,384,386,388],{"class":189,"line":190},[187,379,253],{"class":193},[187,381,256],{"class":197},[187,383,259],{"class":231},[187,385,235],{"class":197},[187,387,264],{"class":204},[187,389,242],{"class":197},[148,391,335,392,339],{},[165,393,394],{},"get",[177,396,398],{"className":179,"code":397,"language":182,"meta":183,"style":183},"await storage.get(\"foo:bar\");\n",[165,399,400],{"__ignoreMap":183},[187,401,402,404,406,408,410,412],{"class":189,"line":190},[187,403,253],{"class":193},[187,405,256],{"class":197},[187,407,394],{"class":231},[187,409,235],{"class":197},[187,411,264],{"class":204},[187,413,242],{"class":197},[296,415,417],{"id":416},"getitemsitems-opts",[165,418,419],{},"getItems(items, opts)",[148,421,422],{},"(Experimental) Gets the value of multiple keys in storage in parallel.",[148,424,425,426,429],{},"Each item in the array can either be a string or an object with ",[165,427,428],{},"{ key, options? }"," format.",[148,431,432,433,429],{},"Returned value is a Promise resolving to an array of objects with ",[165,434,435],{},"{ key, value }",[296,437,439],{"id":438},"getitemrawkey-opts",[165,440,441],{},"getItemRaw(key, opts?)",[148,443,444,447,448,453],{},[274,445,446],{},"Note:"," This is an experimental feature. Please check ",[159,449,452],{"href":450,"rel":451},"https:\u002F\u002Fgithub.com\u002Funjs\u002Funstorage\u002Fissues\u002F142",[163],"unjs\u002Funstorage#142"," for more information.",[148,455,456],{},"Gets the value of a key in storage in raw format.",[177,458,460],{"className":179,"code":459,"language":182,"meta":183,"style":183},"\u002F\u002F Value can be a Buffer, Array or Driver's raw format\nconst value = await storage.getItemRaw(\"foo:bar.bin\");\n",[165,461,462,467],{"__ignoreMap":183},[187,463,464],{"class":189,"line":190},[187,465,466],{"class":238},"\u002F\u002F Value can be a Buffer, Array or Driver's raw format\n",[187,468,469,471,474,476,479,481,484,486,489],{"class":189,"line":211},[187,470,221],{"class":193},[187,472,473],{"class":224}," value",[187,475,228],{"class":193},[187,477,478],{"class":193}," await",[187,480,256],{"class":197},[187,482,483],{"class":231},"getItemRaw",[187,485,235],{"class":197},[187,487,488],{"class":204},"\"foo:bar.bin\"",[187,490,242],{"class":197},[296,492,494],{"id":493},"setitemkey-value-opts",[165,495,496],{},"setItem(key, value, opts?)",[148,498,499],{},"Add\u002FUpdate a value to the storage.",[148,501,502],{},"If the value is not a string, it will be stringified.",[148,504,505,506,509,510,312],{},"If the value is ",[165,507,508],{},"undefined",", it is same as calling ",[165,511,512],{},"removeItem(key)",[177,514,516],{"className":179,"code":515,"language":182,"meta":183,"style":183},"await storage.setItem(\"foo:bar\", \"baz\");\n",[165,517,518],{"__ignoreMap":183},[187,519,520,522,524,527,529,531,534,537],{"class":189,"line":190},[187,521,253],{"class":193},[187,523,256],{"class":197},[187,525,526],{"class":231},"setItem",[187,528,235],{"class":197},[187,530,264],{"class":204},[187,532,533],{"class":197},", ",[187,535,536],{"class":204},"\"baz\"",[187,538,242],{"class":197},[148,540,335,541,339],{},[165,542,543],{},"set",[177,545,547],{"className":179,"code":546,"language":182,"meta":183,"style":183},"await storage.set(\"foo:bar\", \"baz\");\n",[165,548,549],{"__ignoreMap":183},[187,550,551,553,555,557,559,561,563,565],{"class":189,"line":190},[187,552,253],{"class":193},[187,554,256],{"class":197},[187,556,543],{"class":231},[187,558,235],{"class":197},[187,560,264],{"class":204},[187,562,533],{"class":197},[187,564,536],{"class":204},[187,566,242],{"class":197},[296,568,570],{"id":569},"setitemsitems-opts",[165,571,572],{},"setItems(items, opts)",[148,574,575],{},"(Experimental) Add\u002FUpdate items in parallel to the storage.",[148,577,578,579,582,583,429],{},"Each item in ",[165,580,581],{},"items"," array should be in ",[165,584,585],{},"{ key, value, options? }",[148,587,432,588,429],{},[165,589,435],{},[296,591,593],{"id":592},"setitemrawkey-value-opts",[165,594,595],{},"setItemRaw(key, value, opts?)",[148,597,598,447,600,453],{},[274,599,446],{},[159,601,452],{"href":450,"rel":602},[163],[148,604,605],{},"Add\u002FUpdate a value to the storage in raw format.",[148,607,608,609,611,612,312],{},"If value is ",[165,610,508],{},", it is the same as calling ",[165,613,512],{},[177,615,617],{"className":179,"code":616,"language":182,"meta":183,"style":183},"await storage.setItemRaw(\"data\u002Ftest.bin\", new Uint8Array([1, 2, 3]));\n",[165,618,619],{"__ignoreMap":183},[187,620,621,623,625,628,630,633,635,638,641,644,647,649,652,654,657],{"class":189,"line":190},[187,622,253],{"class":193},[187,624,256],{"class":197},[187,626,627],{"class":231},"setItemRaw",[187,629,235],{"class":197},[187,631,632],{"class":204},"\"data\u002Ftest.bin\"",[187,634,533],{"class":197},[187,636,637],{"class":193},"new",[187,639,640],{"class":231}," Uint8Array",[187,642,643],{"class":197},"([",[187,645,646],{"class":224},"1",[187,648,533],{"class":197},[187,650,651],{"class":224},"2",[187,653,533],{"class":197},[187,655,656],{"class":224},"3",[187,658,659],{"class":197},"]));\n",[296,661,663],{"id":662},"removeitemkey-opts-removemeta-false",[165,664,665],{},"removeItem(key, opts = { removeMeta = false })",[148,667,668],{},"Remove a value (and it's meta) from storage.",[177,670,672],{"className":179,"code":671,"language":182,"meta":183,"style":183},"await storage.removeItem(\"foo:bar\", { removeMeta: true });\n\u002F\u002F same as await storage.removeItem(\"foo:bar\", true);\n",[165,673,674,695],{"__ignoreMap":183},[187,675,676,678,680,683,685,687,690,692],{"class":189,"line":190},[187,677,253],{"class":193},[187,679,256],{"class":197},[187,681,682],{"class":231},"removeItem",[187,684,235],{"class":197},[187,686,264],{"class":204},[187,688,689],{"class":197},", { removeMeta: ",[187,691,307],{"class":224},[187,693,694],{"class":197}," });\n",[187,696,697],{"class":189,"line":211},[187,698,699],{"class":238},"\u002F\u002F same as await storage.removeItem(\"foo:bar\", true);\n",[148,701,335,702,308,705,708],{},[165,703,704],{},"del",[165,706,707],{},"remove"," aliases:",[177,710,712],{"className":179,"code":711,"language":182,"meta":183,"style":183},"await storage.remove(\"foo:bar\");\nawait storage.del(\"foo:bar\");\n",[165,713,714,728],{"__ignoreMap":183},[187,715,716,718,720,722,724,726],{"class":189,"line":190},[187,717,253],{"class":193},[187,719,256],{"class":197},[187,721,707],{"class":231},[187,723,235],{"class":197},[187,725,264],{"class":204},[187,727,242],{"class":197},[187,729,730,732,734,736,738,740],{"class":189,"line":211},[187,731,253],{"class":193},[187,733,256],{"class":197},[187,735,704],{"class":231},[187,737,235],{"class":197},[187,739,264],{"class":204},[187,741,242],{"class":197},[296,743,745],{"id":744},"getmetakey-opts-nativeonly",[165,746,747],{},"getMeta(key, opts = { nativeOnly? })",[148,749,750],{},"Get metadata object for a specific key.",[148,752,753],{},"This data is fetched from two sources:",[278,755,756,759],{},[281,757,758],{},"Driver native meta (like file creation time)",[281,760,761,762,765],{},"Custom meta set by ",[165,763,764],{},"storage.setMeta"," (overrides driver native meta)",[177,767,769],{"className":179,"code":768,"language":182,"meta":183,"style":183},"await storage.getMeta(\"foo:bar\"); \u002F\u002F For fs driver returns an object like { mtime, atime, size }\n",[165,770,771],{"__ignoreMap":183},[187,772,773,775,777,780,782,784,786],{"class":189,"line":190},[187,774,253],{"class":193},[187,776,256],{"class":197},[187,778,779],{"class":231},"getMeta",[187,781,235],{"class":197},[187,783,264],{"class":204},[187,785,267],{"class":197},[187,787,788],{"class":238},"\u002F\u002F For fs driver returns an object like { mtime, atime, size }\n",[296,790,792],{"id":791},"setmetakey-opts",[165,793,794],{},"setMeta(key, opts?)",[148,796,797,798,801],{},"Set custom meta for a specific key by adding a ",[165,799,800],{},"$"," suffix.",[177,803,805],{"className":179,"code":804,"language":182,"meta":183,"style":183},"await storage.setMeta(\"foo:bar\", { flag: 1 });\n\u002F\u002F Same as storage.setItem('foo:bar$', { flag: 1 })\n",[165,806,807,827],{"__ignoreMap":183},[187,808,809,811,813,816,818,820,823,825],{"class":189,"line":190},[187,810,253],{"class":193},[187,812,256],{"class":197},[187,814,815],{"class":231},"setMeta",[187,817,235],{"class":197},[187,819,264],{"class":204},[187,821,822],{"class":197},", { flag: ",[187,824,646],{"class":224},[187,826,694],{"class":197},[187,828,829],{"class":189,"line":211},[187,830,831],{"class":238},"\u002F\u002F Same as storage.setItem('foo:bar$', { flag: 1 })\n",[296,833,835],{"id":834},"removemetakey-opts",[165,836,837],{},"removeMeta(key, opts?)",[148,839,840,841,801],{},"Remove meta for a specific key by adding a ",[165,842,800],{},[177,844,846],{"className":179,"code":845,"language":182,"meta":183,"style":183},"await storage.removeMeta(\"foo:bar\");\n\u002F\u002F Same as storage.removeItem('foo:bar$')\n",[165,847,848,863],{"__ignoreMap":183},[187,849,850,852,854,857,859,861],{"class":189,"line":190},[187,851,253],{"class":193},[187,853,256],{"class":197},[187,855,856],{"class":231},"removeMeta",[187,858,235],{"class":197},[187,860,264],{"class":204},[187,862,242],{"class":197},[187,864,865],{"class":189,"line":211},[187,866,867],{"class":238},"\u002F\u002F Same as storage.removeItem('foo:bar$')\n",[296,869,871],{"id":870},"getkeysbase-opts",[165,872,873],{},"getKeys(base?, opts?)",[148,875,876],{},"Get all keys. Returns an array of strings.",[148,878,879,880,882],{},"Meta keys (ending with ",[165,881,800],{},") will be filtered.",[148,884,885],{},"If a base is provided, only keys starting with the base will be returned and only mounts starting with base will be queried. Keys still have a full path.",[177,887,889],{"className":179,"code":888,"language":182,"meta":183,"style":183},"await storage.getKeys();\n",[165,890,891],{"__ignoreMap":183},[187,892,893,895,897,900],{"class":189,"line":190},[187,894,253],{"class":193},[187,896,256],{"class":197},[187,898,899],{"class":231},"getKeys",[187,901,902],{"class":197},"();\n",[148,904,335,905,339],{},[165,906,907],{},"keys",[177,909,911],{"className":179,"code":910,"language":182,"meta":183,"style":183},"await storage.keys();\n",[165,912,913],{"__ignoreMap":183},[187,914,915,917,919,921],{"class":189,"line":190},[187,916,253],{"class":193},[187,918,256],{"class":197},[187,920,907],{"class":231},[187,922,902],{"class":197},[296,924,926],{"id":925},"clearbase-opts",[165,927,928],{},"clear(base?, opts?)",[148,930,931],{},"Removes all stored key\u002Fvalues. If a base is provided, only mounts matching base will be cleared.",[177,933,935],{"className":179,"code":934,"language":182,"meta":183,"style":183},"await storage.clear();\n",[165,936,937],{"__ignoreMap":183},[187,938,939,941,943,946],{"class":189,"line":190},[187,940,253],{"class":193},[187,942,256],{"class":197},[187,944,945],{"class":231},"clear",[187,947,902],{"class":197},[296,949,951],{"id":950},"dispose",[165,952,953],{},"dispose()",[148,955,956],{},"Disposes all mounted storages to ensure there are no open-handles left. Call it before exiting process.",[148,958,959,961],{},[274,960,446],{}," Dispose also clears in-memory data.",[177,963,965],{"className":179,"code":964,"language":182,"meta":183,"style":183},"await storage.dispose();\n",[165,966,967],{"__ignoreMap":183},[187,968,969,971,973,975],{"class":189,"line":190},[187,970,253],{"class":193},[187,972,256],{"class":197},[187,974,950],{"class":231},[187,976,902],{"class":197},[296,978,980],{"id":979},"mountmountpoint-driver",[165,981,982],{},"mount(mountpoint, driver)",[148,984,985],{},"By default, everything is stored in memory. We can mount additional storage space in a Unix-like fashion.",[148,987,988,989,992],{},"When operating with a ",[165,990,991],{},"key"," that starts with mountpoint, instead of default storage, mounted driver will be called.",[148,994,995,996,999,1000,1003,1004,1007],{},"In addition to ",[165,997,998],{},"base",", you can set ",[165,1001,1002],{},"readOnly"," and ",[165,1005,1006],{},"noClear"," to disable write and clear operations.",[177,1009,1011],{"className":179,"code":1010,"language":182,"meta":183,"style":183},"import { createStorage } from \"unstorage\";\nimport fsDriver from \"unstorage\u002Fdrivers\u002Ffs\";\n\n\u002F\u002F Create a storage container with default memory storage\nconst storage = createStorage({});\n\nstorage.mount(\"\u002Foutput\", fsDriver({ base: \".\u002Foutput\" }));\n\n\u002F\u002F  Writes to .\u002Foutput\u002Ftest file\nawait storage.setItem(\"\u002Foutput\u002Ftest\", \"works\");\n\n\u002F\u002F Adds value to in-memory storage\nawait storage.setItem(\"\u002Ffoo\", \"bar\");\n",[165,1012,1013,1025,1039,1043,1048,1061,1066,1094,1099,1105,1126,1131,1137],{"__ignoreMap":183},[187,1014,1015,1017,1019,1021,1023],{"class":189,"line":190},[187,1016,194],{"class":193},[187,1018,198],{"class":197},[187,1020,201],{"class":193},[187,1022,205],{"class":204},[187,1024,208],{"class":197},[187,1026,1027,1029,1032,1034,1037],{"class":189,"line":211},[187,1028,194],{"class":193},[187,1030,1031],{"class":197}," fsDriver ",[187,1033,201],{"class":193},[187,1035,1036],{"class":204}," \"unstorage\u002Fdrivers\u002Ffs\"",[187,1038,208],{"class":197},[187,1040,1041],{"class":189,"line":218},[187,1042,215],{"emptyLinePlaceholder":214},[187,1044,1045],{"class":189,"line":245},[187,1046,1047],{"class":238},"\u002F\u002F Create a storage container with default memory storage\n",[187,1049,1050,1052,1054,1056,1058],{"class":189,"line":250},[187,1051,221],{"class":193},[187,1053,225],{"class":224},[187,1055,228],{"class":193},[187,1057,232],{"class":231},[187,1059,1060],{"class":197},"({});\n",[187,1062,1064],{"class":189,"line":1063},6,[187,1065,215],{"emptyLinePlaceholder":214},[187,1067,1069,1072,1075,1077,1080,1082,1085,1088,1091],{"class":189,"line":1068},7,[187,1070,1071],{"class":197},"storage.",[187,1073,1074],{"class":231},"mount",[187,1076,235],{"class":197},[187,1078,1079],{"class":204},"\"\u002Foutput\"",[187,1081,533],{"class":197},[187,1083,1084],{"class":231},"fsDriver",[187,1086,1087],{"class":197},"({ base: ",[187,1089,1090],{"class":204},"\".\u002Foutput\"",[187,1092,1093],{"class":197}," }));\n",[187,1095,1097],{"class":189,"line":1096},8,[187,1098,215],{"emptyLinePlaceholder":214},[187,1100,1102],{"class":189,"line":1101},9,[187,1103,1104],{"class":238},"\u002F\u002F  Writes to .\u002Foutput\u002Ftest file\n",[187,1106,1108,1110,1112,1114,1116,1119,1121,1124],{"class":189,"line":1107},10,[187,1109,253],{"class":193},[187,1111,256],{"class":197},[187,1113,526],{"class":231},[187,1115,235],{"class":197},[187,1117,1118],{"class":204},"\"\u002Foutput\u002Ftest\"",[187,1120,533],{"class":197},[187,1122,1123],{"class":204},"\"works\"",[187,1125,242],{"class":197},[187,1127,1129],{"class":189,"line":1128},11,[187,1130,215],{"emptyLinePlaceholder":214},[187,1132,1134],{"class":189,"line":1133},12,[187,1135,1136],{"class":238},"\u002F\u002F Adds value to in-memory storage\n",[187,1138,1140,1142,1144,1146,1148,1151,1153,1156],{"class":189,"line":1139},13,[187,1141,253],{"class":193},[187,1143,256],{"class":197},[187,1145,526],{"class":231},[187,1147,235],{"class":197},[187,1149,1150],{"class":204},"\"\u002Ffoo\"",[187,1152,533],{"class":197},[187,1154,1155],{"class":204},"\"bar\"",[187,1157,242],{"class":197},[296,1159,1161],{"id":1160},"unmountmountpoint-dispose-true",[165,1162,1163],{},"unmount(mountpoint, dispose = true)",[148,1165,1166],{},"Unregisters a mountpoint. Has no effect if mountpoint is not found or is root.",[177,1168,1170],{"className":179,"code":1169,"language":182,"meta":183,"style":183},"await storage.unmount(\"\u002Foutput\");\n",[165,1171,1172],{"__ignoreMap":183},[187,1173,1174,1176,1178,1181,1183,1185],{"class":189,"line":190},[187,1175,253],{"class":193},[187,1177,256],{"class":197},[187,1179,1180],{"class":231},"unmount",[187,1182,235],{"class":197},[187,1184,1079],{"class":204},[187,1186,242],{"class":197},[296,1188,1190],{"id":1189},"watchcallback",[165,1191,1192],{},"watch(callback)",[148,1194,1195,1196,1199],{},"Starts watching on all mountpoints. If driver does not support watching, only emits even when ",[165,1197,1198],{},"storage.*"," methods are called.",[177,1201,1203],{"className":179,"code":1202,"language":182,"meta":183,"style":183},"const unwatch = await storage.watch((event, key) => {});\n\u002F\u002F to stop this watcher\nawait unwatch();\n",[165,1204,1205,1241,1246],{"__ignoreMap":183},[187,1206,1207,1209,1212,1214,1216,1218,1221,1224,1228,1230,1232,1235,1238],{"class":189,"line":190},[187,1208,221],{"class":193},[187,1210,1211],{"class":224}," unwatch",[187,1213,228],{"class":193},[187,1215,478],{"class":193},[187,1217,256],{"class":197},[187,1219,1220],{"class":231},"watch",[187,1222,1223],{"class":197},"((",[187,1225,1227],{"class":1226},"sQHwn","event",[187,1229,533],{"class":197},[187,1231,991],{"class":1226},[187,1233,1234],{"class":197},") ",[187,1236,1237],{"class":193},"=>",[187,1239,1240],{"class":197}," {});\n",[187,1242,1243],{"class":189,"line":211},[187,1244,1245],{"class":238},"\u002F\u002F to stop this watcher\n",[187,1247,1248,1250,1252],{"class":189,"line":218},[187,1249,253],{"class":193},[187,1251,1211],{"class":231},[187,1253,902],{"class":197},[296,1255,1257],{"id":1256},"unwatch",[165,1258,1259],{},"unwatch()",[148,1261,1262],{},"Stop all watchers on all mountpoints.",[177,1264,1266],{"className":179,"code":1265,"language":182,"meta":183,"style":183},"await storage.unwatch();\n",[165,1267,1268],{"__ignoreMap":183},[187,1269,1270,1272,1274,1276],{"class":189,"line":190},[187,1271,253],{"class":193},[187,1273,256],{"class":197},[187,1275,1256],{"class":231},[187,1277,902],{"class":197},[296,1279,1281],{"id":1280},"getmountkey",[165,1282,1283],{},"getMount(key)",[148,1285,1286],{},"Gets the mount point (driver and base) for a specific key in storage.",[177,1288,1290],{"className":179,"code":1289,"language":182,"meta":183,"style":183},"storage.mount(\"cache\" \u002F* ... *\u002F);\nstorage.mount(\"cache:routes\" \u002F* ... *\u002F);\n\nstorage.getMount(\"cache:routes:foo:bar\");\n\u002F\u002F => { base: \"cache:routes:\", driver: \"...\" }\n",[165,1291,1292,1308,1323,1327,1341],{"__ignoreMap":183},[187,1293,1294,1296,1298,1300,1303,1306],{"class":189,"line":190},[187,1295,1071],{"class":197},[187,1297,1074],{"class":231},[187,1299,235],{"class":197},[187,1301,1302],{"class":204},"\"cache\"",[187,1304,1305],{"class":238}," \u002F* ... *\u002F",[187,1307,242],{"class":197},[187,1309,1310,1312,1314,1316,1319,1321],{"class":189,"line":211},[187,1311,1071],{"class":197},[187,1313,1074],{"class":231},[187,1315,235],{"class":197},[187,1317,1318],{"class":204},"\"cache:routes\"",[187,1320,1305],{"class":238},[187,1322,242],{"class":197},[187,1324,1325],{"class":189,"line":218},[187,1326,215],{"emptyLinePlaceholder":214},[187,1328,1329,1331,1334,1336,1339],{"class":189,"line":245},[187,1330,1071],{"class":197},[187,1332,1333],{"class":231},"getMount",[187,1335,235],{"class":197},[187,1337,1338],{"class":204},"\"cache:routes:foo:bar\"",[187,1340,242],{"class":197},[187,1342,1343],{"class":189,"line":250},[187,1344,1345],{"class":238},"\u002F\u002F => { base: \"cache:routes:\", driver: \"...\" }\n",[296,1347,1349],{"id":1348},"getmountsbase-parents-boolean",[165,1350,1351],{},"getMounts(base?, { parents: boolean }?)",[148,1353,1354],{},"Gets the mount points on a specific base.",[177,1356,1358],{"className":179,"code":1357,"language":182,"meta":183,"style":183},"storage.mount(\"cache\" \u002F* ... *\u002F);\nstorage.mount(\"cache:sub\" \u002F* ... *\u002F);\n\nstorage.getMounts(\"cache:sub\");\n\u002F\u002F => [{ base: \"cache:sub\", driver }]\n\nstorage.getMounts(\"cache:\");\n\u002F\u002F => [{ base: \"cache:sub\", driver }, { base: \"cache:\", driver }]\n\nstorage.getMounts(\"\");\nstorage.getMounts(\"cache:sub\", { parents: true });\n\u002F\u002F => [{ base: \"cache:sub\", driver }, { base: \"cache:\", driver }, { base: \"\", driver }]\n",[165,1359,1360,1374,1389,1393,1406,1411,1415,1428,1433,1437,1450,1467],{"__ignoreMap":183},[187,1361,1362,1364,1366,1368,1370,1372],{"class":189,"line":190},[187,1363,1071],{"class":197},[187,1365,1074],{"class":231},[187,1367,235],{"class":197},[187,1369,1302],{"class":204},[187,1371,1305],{"class":238},[187,1373,242],{"class":197},[187,1375,1376,1378,1380,1382,1385,1387],{"class":189,"line":211},[187,1377,1071],{"class":197},[187,1379,1074],{"class":231},[187,1381,235],{"class":197},[187,1383,1384],{"class":204},"\"cache:sub\"",[187,1386,1305],{"class":238},[187,1388,242],{"class":197},[187,1390,1391],{"class":189,"line":218},[187,1392,215],{"emptyLinePlaceholder":214},[187,1394,1395,1397,1400,1402,1404],{"class":189,"line":245},[187,1396,1071],{"class":197},[187,1398,1399],{"class":231},"getMounts",[187,1401,235],{"class":197},[187,1403,1384],{"class":204},[187,1405,242],{"class":197},[187,1407,1408],{"class":189,"line":250},[187,1409,1410],{"class":238},"\u002F\u002F => [{ base: \"cache:sub\", driver }]\n",[187,1412,1413],{"class":189,"line":1063},[187,1414,215],{"emptyLinePlaceholder":214},[187,1416,1417,1419,1421,1423,1426],{"class":189,"line":1068},[187,1418,1071],{"class":197},[187,1420,1399],{"class":231},[187,1422,235],{"class":197},[187,1424,1425],{"class":204},"\"cache:\"",[187,1427,242],{"class":197},[187,1429,1430],{"class":189,"line":1096},[187,1431,1432],{"class":238},"\u002F\u002F => [{ base: \"cache:sub\", driver }, { base: \"cache:\", driver }]\n",[187,1434,1435],{"class":189,"line":1101},[187,1436,215],{"emptyLinePlaceholder":214},[187,1438,1439,1441,1443,1445,1448],{"class":189,"line":1107},[187,1440,1071],{"class":197},[187,1442,1399],{"class":231},[187,1444,235],{"class":197},[187,1446,1447],{"class":204},"\"\"",[187,1449,242],{"class":197},[187,1451,1452,1454,1456,1458,1460,1463,1465],{"class":189,"line":1128},[187,1453,1071],{"class":197},[187,1455,1399],{"class":231},[187,1457,235],{"class":197},[187,1459,1384],{"class":204},[187,1461,1462],{"class":197},", { parents: ",[187,1464,307],{"class":224},[187,1466,694],{"class":197},[187,1468,1469],{"class":189,"line":1133},[187,1470,1471],{"class":238},"\u002F\u002F => [{ base: \"cache:sub\", driver }, { base: \"cache:\", driver }, { base: \"\", driver }]\n",[143,1473,1475],{"id":1474},"generic-types","Generic types",[148,1477,1478],{},[274,1479,1480,1481,1483],{},"Type ",[165,1482,259],{}," return value:",[177,1485,1489],{"className":1486,"code":1487,"language":1488,"meta":183,"style":183},"language-ts shiki shiki-themes github-light github-dark github-dark","await storage.getItem\u003Cstring>(\"k\"); \u002F\u002F => \u003Cstring>\n\nawait storage.getItemRaw\u003CBuffer>(\"k\"); \u002F\u002F => \u003CBuffer>\n","ts",[165,1490,1491,1516,1520],{"__ignoreMap":183},[187,1492,1493,1495,1497,1499,1502,1505,1508,1511,1513],{"class":189,"line":190},[187,1494,253],{"class":193},[187,1496,256],{"class":197},[187,1498,259],{"class":231},[187,1500,1501],{"class":197},"\u003C",[187,1503,1504],{"class":224},"string",[187,1506,1507],{"class":197},">(",[187,1509,1510],{"class":204},"\"k\"",[187,1512,267],{"class":197},[187,1514,1515],{"class":238},"\u002F\u002F => \u003Cstring>\n",[187,1517,1518],{"class":189,"line":211},[187,1519,215],{"emptyLinePlaceholder":214},[187,1521,1522,1524,1526,1528,1530,1533,1535,1537,1539],{"class":189,"line":218},[187,1523,253],{"class":193},[187,1525,256],{"class":197},[187,1527,483],{"class":231},[187,1529,1501],{"class":197},[187,1531,1532],{"class":231},"Buffer",[187,1534,1507],{"class":197},[187,1536,1510],{"class":204},[187,1538,267],{"class":197},[187,1540,1541],{"class":238},"\u002F\u002F => \u003CBuffer>\n",[148,1543,1544],{},[274,1545,1546,1547,1549],{},"Type check ",[165,1548,526],{}," parameters:",[177,1551,1553],{"className":1486,"code":1552,"language":1488,"meta":183,"style":183},"storage.setItem\u003Cstring>(\"k\", \"val\"); \u002F\u002F check ok\nstorage.setItemRaw\u003Cstring>(\"k\", \"val\"); \u002F\u002F check ok\n\nstorage.setItem\u003Cstring>(\"k\", 123); \u002F\u002F ts error\nstorage.setItemRaw\u003Cstring>(\"k\", 123); \u002F\u002F ts error\n",[165,1554,1555,1579,1601,1605,1629],{"__ignoreMap":183},[187,1556,1557,1559,1561,1563,1565,1567,1569,1571,1574,1576],{"class":189,"line":190},[187,1558,1071],{"class":197},[187,1560,526],{"class":231},[187,1562,1501],{"class":197},[187,1564,1504],{"class":224},[187,1566,1507],{"class":197},[187,1568,1510],{"class":204},[187,1570,533],{"class":197},[187,1572,1573],{"class":204},"\"val\"",[187,1575,267],{"class":197},[187,1577,1578],{"class":238},"\u002F\u002F check ok\n",[187,1580,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599],{"class":189,"line":211},[187,1582,1071],{"class":197},[187,1584,627],{"class":231},[187,1586,1501],{"class":197},[187,1588,1504],{"class":224},[187,1590,1507],{"class":197},[187,1592,1510],{"class":204},[187,1594,533],{"class":197},[187,1596,1573],{"class":204},[187,1598,267],{"class":197},[187,1600,1578],{"class":238},[187,1602,1603],{"class":189,"line":218},[187,1604,215],{"emptyLinePlaceholder":214},[187,1606,1607,1609,1611,1613,1615,1617,1619,1621,1624,1626],{"class":189,"line":245},[187,1608,1071],{"class":197},[187,1610,526],{"class":231},[187,1612,1501],{"class":197},[187,1614,1504],{"class":224},[187,1616,1507],{"class":197},[187,1618,1510],{"class":204},[187,1620,533],{"class":197},[187,1622,1623],{"class":224},"123",[187,1625,267],{"class":197},[187,1627,1628],{"class":238},"\u002F\u002F ts error\n",[187,1630,1631,1633,1635,1637,1639,1641,1643,1645,1647,1649],{"class":189,"line":250},[187,1632,1071],{"class":197},[187,1634,627],{"class":231},[187,1636,1501],{"class":197},[187,1638,1504],{"class":224},[187,1640,1507],{"class":197},[187,1642,1510],{"class":204},[187,1644,533],{"class":197},[187,1646,1623],{"class":224},[187,1648,267],{"class":197},[187,1650,1628],{"class":238},[148,1652,1653],{},[274,1654,1655],{},"Typed storage instance:",[177,1657,1659],{"className":1486,"code":1658,"language":1488,"meta":183,"style":183},"const storage = createStorage\u003Cstring>();\n\nawait storage.getItem(\"k\"); \u002F\u002F => \u003Cstring>\n\nstorage.setItem(\"k\", \"val\"); \u002F\u002F Check ok\nstorage.setItem(\"k\", 123); \u002F\u002F TS error\n",[165,1660,1661,1678,1682,1698,1702,1721],{"__ignoreMap":183},[187,1662,1663,1665,1667,1669,1671,1673,1675],{"class":189,"line":190},[187,1664,221],{"class":193},[187,1666,225],{"class":224},[187,1668,228],{"class":193},[187,1670,232],{"class":231},[187,1672,1501],{"class":197},[187,1674,1504],{"class":224},[187,1676,1677],{"class":197},">();\n",[187,1679,1680],{"class":189,"line":211},[187,1681,215],{"emptyLinePlaceholder":214},[187,1683,1684,1686,1688,1690,1692,1694,1696],{"class":189,"line":218},[187,1685,253],{"class":193},[187,1687,256],{"class":197},[187,1689,259],{"class":231},[187,1691,235],{"class":197},[187,1693,1510],{"class":204},[187,1695,267],{"class":197},[187,1697,1515],{"class":238},[187,1699,1700],{"class":189,"line":245},[187,1701,215],{"emptyLinePlaceholder":214},[187,1703,1704,1706,1708,1710,1712,1714,1716,1718],{"class":189,"line":250},[187,1705,1071],{"class":197},[187,1707,526],{"class":231},[187,1709,235],{"class":197},[187,1711,1510],{"class":204},[187,1713,533],{"class":197},[187,1715,1573],{"class":204},[187,1717,267],{"class":197},[187,1719,1720],{"class":238},"\u002F\u002F Check ok\n",[187,1722,1723,1725,1727,1729,1731,1733,1735,1737],{"class":189,"line":1063},[187,1724,1071],{"class":197},[187,1726,526],{"class":231},[187,1728,235],{"class":197},[187,1730,1510],{"class":204},[187,1732,533],{"class":197},[187,1734,1623],{"class":224},[187,1736,267],{"class":197},[187,1738,1739],{"class":238},"\u002F\u002F TS error\n",[1741,1742,1743],"note",{},[148,1744,1745],{},"Forward references use inheritance instead of overriding types.",[177,1747,1749],{"className":1486,"code":1748,"language":1488,"meta":183,"style":183},"const storage = createStorage\u003Cstring>();\n\nstorage.setItem\u003Cnumber>(\"k\", 123); \u002F\u002F TS error: \u003Cnumber> is not compatible with \u003Cstring>\n",[165,1750,1751,1767,1771],{"__ignoreMap":183},[187,1752,1753,1755,1757,1759,1761,1763,1765],{"class":189,"line":190},[187,1754,221],{"class":193},[187,1756,225],{"class":224},[187,1758,228],{"class":193},[187,1760,232],{"class":231},[187,1762,1501],{"class":197},[187,1764,1504],{"class":224},[187,1766,1677],{"class":197},[187,1768,1769],{"class":189,"line":211},[187,1770,215],{"emptyLinePlaceholder":214},[187,1772,1773,1775,1777,1779,1782,1784,1786,1788,1790,1792],{"class":189,"line":218},[187,1774,1071],{"class":197},[187,1776,526],{"class":231},[187,1778,1501],{"class":197},[187,1780,1781],{"class":224},"number",[187,1783,1507],{"class":197},[187,1785,1510],{"class":204},[187,1787,533],{"class":197},[187,1789,1623],{"class":224},[187,1791,267],{"class":197},[187,1793,1794],{"class":238},"\u002F\u002F TS error: \u003Cnumber> is not compatible with \u003Cstring>\n",[148,1796,1797],{},[274,1798,1799,1800,1803],{},"Typing a sub set using ",[165,1801,1802],{},"prefixStorage",":",[177,1805,1807],{"className":1486,"code":1806,"language":1488,"meta":183,"style":183},"const storage = createStorage();\n\nconst htmlStorage = prefixStorage\u003Cstring>(storage, \"assets:html\");\n\nawait htmlStorage.getItem(\"foo.html\"); \u002F\u002F => \u003Cstring>\n\ntype Post = {\n  title: string;\n  content: string;\n};\n\nconst postStorage = prefixStorage\u003CPost>(storage, \"assets:posts\");\n\nawait postStorage.getItem(\"foo.json\"); \u002F\u002F => \u003CPost>\n",[165,1808,1809,1821,1825,1849,1853,1871,1875,1888,1900,1911,1916,1920,1943,1947],{"__ignoreMap":183},[187,1810,1811,1813,1815,1817,1819],{"class":189,"line":190},[187,1812,221],{"class":193},[187,1814,225],{"class":224},[187,1816,228],{"class":193},[187,1818,232],{"class":231},[187,1820,902],{"class":197},[187,1822,1823],{"class":189,"line":211},[187,1824,215],{"emptyLinePlaceholder":214},[187,1826,1827,1829,1832,1834,1837,1839,1841,1844,1847],{"class":189,"line":218},[187,1828,221],{"class":193},[187,1830,1831],{"class":224}," htmlStorage",[187,1833,228],{"class":193},[187,1835,1836],{"class":231}," prefixStorage",[187,1838,1501],{"class":197},[187,1840,1504],{"class":224},[187,1842,1843],{"class":197},">(storage, ",[187,1845,1846],{"class":204},"\"assets:html\"",[187,1848,242],{"class":197},[187,1850,1851],{"class":189,"line":245},[187,1852,215],{"emptyLinePlaceholder":214},[187,1854,1855,1857,1860,1862,1864,1867,1869],{"class":189,"line":250},[187,1856,253],{"class":193},[187,1858,1859],{"class":197}," htmlStorage.",[187,1861,259],{"class":231},[187,1863,235],{"class":197},[187,1865,1866],{"class":204},"\"foo.html\"",[187,1868,267],{"class":197},[187,1870,1515],{"class":238},[187,1872,1873],{"class":189,"line":1063},[187,1874,215],{"emptyLinePlaceholder":214},[187,1876,1877,1880,1883,1885],{"class":189,"line":1068},[187,1878,1879],{"class":193},"type",[187,1881,1882],{"class":231}," Post",[187,1884,228],{"class":193},[187,1886,1887],{"class":197}," {\n",[187,1889,1890,1893,1895,1898],{"class":189,"line":1096},[187,1891,1892],{"class":1226},"  title",[187,1894,1803],{"class":193},[187,1896,1897],{"class":224}," string",[187,1899,208],{"class":197},[187,1901,1902,1905,1907,1909],{"class":189,"line":1101},[187,1903,1904],{"class":1226},"  content",[187,1906,1803],{"class":193},[187,1908,1897],{"class":224},[187,1910,208],{"class":197},[187,1912,1913],{"class":189,"line":1107},[187,1914,1915],{"class":197},"};\n",[187,1917,1918],{"class":189,"line":1128},[187,1919,215],{"emptyLinePlaceholder":214},[187,1921,1922,1924,1927,1929,1931,1933,1936,1938,1941],{"class":189,"line":1133},[187,1923,221],{"class":193},[187,1925,1926],{"class":224}," postStorage",[187,1928,228],{"class":193},[187,1930,1836],{"class":231},[187,1932,1501],{"class":197},[187,1934,1935],{"class":231},"Post",[187,1937,1843],{"class":197},[187,1939,1940],{"class":204},"\"assets:posts\"",[187,1942,242],{"class":197},[187,1944,1945],{"class":189,"line":1139},[187,1946,215],{"emptyLinePlaceholder":214},[187,1948,1950,1952,1955,1957,1959,1962,1964],{"class":189,"line":1949},14,[187,1951,253],{"class":193},[187,1953,1954],{"class":197}," postStorage.",[187,1956,259],{"class":231},[187,1958,235],{"class":197},[187,1960,1961],{"class":204},"\"foo.json\"",[187,1963,267],{"class":197},[187,1965,1966],{"class":238},"\u002F\u002F => \u003CPost>\n",[148,1968,1969,1970,1975,1976,1978,1979,1981],{},"In ",[159,1971,1974],{"href":1972,"rel":1973},"https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig#strict",[163],"strict mode",", it will also return the ",[165,1977,370],{}," type to help you handle the case when ",[165,1980,259],{}," is missing.",[177,1983,1985],{"className":1486,"code":1984,"language":1488,"meta":183,"style":183},"\"use strict\";\n\nawait storage.getItem\u003Cstring>(\"k\"); \u002F\u002F => \u003Cstring | null>\n",[165,1986,1987,1994,1998],{"__ignoreMap":183},[187,1988,1989,1992],{"class":189,"line":190},[187,1990,1991],{"class":204},"\"use strict\"",[187,1993,208],{"class":197},[187,1995,1996],{"class":189,"line":211},[187,1997,215],{"emptyLinePlaceholder":214},[187,1999,2000,2002,2004,2006,2008,2010,2012,2014,2016],{"class":189,"line":218},[187,2001,253],{"class":193},[187,2003,256],{"class":197},[187,2005,259],{"class":231},[187,2007,1501],{"class":197},[187,2009,1504],{"class":224},[187,2011,1507],{"class":197},[187,2013,1510],{"class":204},[187,2015,267],{"class":197},[187,2017,2018],{"class":238},"\u002F\u002F => \u003Cstring | null>\n",[148,2020,2021],{},[274,2022,2023],{},"Specifying namespace:",[177,2025,2027],{"className":1486,"code":2026,"language":1488,"meta":183,"style":183},"type StorageDefinition = {\n  items: {\n    foo: string;\n    baz: number;\n  };\n};\n\nconst storage = createStorage\u003CStorageDefinition>();\nawait storage.has(\"foo\"); \u002F\u002F Ts will prompt you that there are two optional keys: \"foo\" or \"baz\"\nawait storage.getItem(\"baz\"); \u002F\u002F => string\nawait storage.setItem(\"foo\", 12); \u002F\u002F TS error: \u003Cnumber> is not compatible with \u003Cstring>\nawait storage.setItem(\"foo\", \"val\"); \u002F\u002F Check ok\nawait storage.remove(\"foo\");\n",[165,2028,2029,2040,2049,2060,2072,2077,2081,2085,2102,2120,2137,2158,2178],{"__ignoreMap":183},[187,2030,2031,2033,2036,2038],{"class":189,"line":190},[187,2032,1879],{"class":193},[187,2034,2035],{"class":231}," StorageDefinition",[187,2037,228],{"class":193},[187,2039,1887],{"class":197},[187,2041,2042,2045,2047],{"class":189,"line":211},[187,2043,2044],{"class":1226},"  items",[187,2046,1803],{"class":193},[187,2048,1887],{"class":197},[187,2050,2051,2054,2056,2058],{"class":189,"line":218},[187,2052,2053],{"class":1226},"    foo",[187,2055,1803],{"class":193},[187,2057,1897],{"class":224},[187,2059,208],{"class":197},[187,2061,2062,2065,2067,2070],{"class":189,"line":245},[187,2063,2064],{"class":1226},"    baz",[187,2066,1803],{"class":193},[187,2068,2069],{"class":224}," number",[187,2071,208],{"class":197},[187,2073,2074],{"class":189,"line":250},[187,2075,2076],{"class":197},"  };\n",[187,2078,2079],{"class":189,"line":1063},[187,2080,1915],{"class":197},[187,2082,2083],{"class":189,"line":1068},[187,2084,215],{"emptyLinePlaceholder":214},[187,2086,2087,2089,2091,2093,2095,2097,2100],{"class":189,"line":1096},[187,2088,221],{"class":193},[187,2090,225],{"class":224},[187,2092,228],{"class":193},[187,2094,232],{"class":231},[187,2096,1501],{"class":197},[187,2098,2099],{"class":231},"StorageDefinition",[187,2101,1677],{"class":197},[187,2103,2104,2106,2108,2110,2112,2115,2117],{"class":189,"line":1101},[187,2105,253],{"class":193},[187,2107,256],{"class":197},[187,2109,338],{"class":231},[187,2111,235],{"class":197},[187,2113,2114],{"class":204},"\"foo\"",[187,2116,267],{"class":197},[187,2118,2119],{"class":238},"\u002F\u002F Ts will prompt you that there are two optional keys: \"foo\" or \"baz\"\n",[187,2121,2122,2124,2126,2128,2130,2132,2134],{"class":189,"line":1107},[187,2123,253],{"class":193},[187,2125,256],{"class":197},[187,2127,259],{"class":231},[187,2129,235],{"class":197},[187,2131,536],{"class":204},[187,2133,267],{"class":197},[187,2135,2136],{"class":238},"\u002F\u002F => string\n",[187,2138,2139,2141,2143,2145,2147,2149,2151,2154,2156],{"class":189,"line":1128},[187,2140,253],{"class":193},[187,2142,256],{"class":197},[187,2144,526],{"class":231},[187,2146,235],{"class":197},[187,2148,2114],{"class":204},[187,2150,533],{"class":197},[187,2152,2153],{"class":224},"12",[187,2155,267],{"class":197},[187,2157,1794],{"class":238},[187,2159,2160,2162,2164,2166,2168,2170,2172,2174,2176],{"class":189,"line":1133},[187,2161,253],{"class":193},[187,2163,256],{"class":197},[187,2165,526],{"class":231},[187,2167,235],{"class":197},[187,2169,2114],{"class":204},[187,2171,533],{"class":197},[187,2173,1573],{"class":204},[187,2175,267],{"class":197},[187,2177,1720],{"class":238},[187,2179,2180,2182,2184,2186,2188,2190],{"class":189,"line":1139},[187,2181,253],{"class":193},[187,2183,256],{"class":197},[187,2185,707],{"class":231},[187,2187,235],{"class":197},[187,2189,2114],{"class":204},[187,2191,242],{"class":197},[2193,2194,2195],"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 pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sCsY4, html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}",{"title":183,"searchDepth":211,"depth":211,"links":2197},[2198,2199,2200,2201,2223],{"id":145,"depth":211,"text":146},{"id":153,"depth":211,"text":154},{"id":174,"depth":211,"text":175},{"id":293,"depth":211,"text":294,"children":2202},[2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222],{"id":298,"depth":218,"text":301},{"id":361,"depth":218,"text":364},{"id":416,"depth":218,"text":419},{"id":438,"depth":218,"text":441},{"id":493,"depth":218,"text":496},{"id":569,"depth":218,"text":572},{"id":592,"depth":218,"text":595},{"id":662,"depth":218,"text":665},{"id":744,"depth":218,"text":747},{"id":791,"depth":218,"text":794},{"id":834,"depth":218,"text":837},{"id":870,"depth":218,"text":873},{"id":925,"depth":218,"text":928},{"id":950,"depth":218,"text":953},{"id":979,"depth":218,"text":982},{"id":1160,"depth":218,"text":1163},{"id":1189,"depth":218,"text":1192},{"id":1256,"depth":218,"text":1259},{"id":1280,"depth":218,"text":1283},{"id":1348,"depth":218,"text":1351},{"id":1474,"depth":211,"text":1475},"Learn how to setup and use unstorage in your project.","md",{"icon":10},{"icon":10},{"title":5,"description":2224},"nA7BIbnNzmki2bXk3FTkgyrguv0noJU9DpKDoLP9lnQ",[2231,2232],null,{"title":12,"path":13,"stem":14,"description":2233,"icon":15,"children":-1},"Unstorage exposes several utilities. You can individually import them and add only the needed bytes to your bundle.",1781217587212]