[{"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","/guide","1.guide/1.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","/guide/utils","1.guide/2.utils","et:tools-2",{"title":17,"path":18,"stem":19,"icon":20},"HTTP Server","/guide/http-server","1.guide/3.http-server","ic:baseline-http",{"title":22,"path":23,"stem":24,"icon":25},"Custom Driver","/guide/custom-driver","1.guide/4.custom-driver","carbon:area-custom",{"title":27,"path":28,"stem":29,"children":30,"icon":32},"Drivers","/drivers","2.drivers/0.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","/drivers/azure","2.drivers/azure","mdi:microsoft-azure",{"title":39,"path":40,"stem":41,"icon":42},"Browser","/drivers/browser","2.drivers/browser","ph:browser-thin",{"title":44,"path":45,"stem":46,"icon":47},"Capacitor Preferences","/drivers/capacitor-preferences","2.drivers/capacitor-preferences","nonicons:capacitor-16",{"title":49,"path":50,"stem":51,"icon":52},"Cloudflare","/drivers/cloudflare","2.drivers/cloudflare","devicon-plain:cloudflareworkers",{"title":54,"path":55,"stem":56,"icon":57},"SQL Database","/drivers/database","2.drivers/database","ph:database",{"title":59,"path":60,"stem":61,"icon":62},"Deno KV","/drivers/deno","2.drivers/deno","simple-icons:deno",{"title":64,"path":65,"stem":66,"icon":67},"Filesystem (Node.js)","/drivers/fs","2.drivers/fs","ph:file-light",{"title":69,"path":70,"stem":71,"icon":72},"GitHub","/drivers/github","2.drivers/github","mdi:github",{"title":74,"path":75,"stem":76,"icon":20},"HTTP","/drivers/http","2.drivers/http",{"title":78,"path":79,"stem":80,"icon":81},"LRU Cache","/drivers/lru-cache","2.drivers/lru-cache","material-symbols:cached-rounded",{"title":83,"path":84,"stem":85,"icon":86},"Memory","/drivers/memory","2.drivers/memory","bi:memory",{"title":88,"path":89,"stem":90,"icon":91},"MongoDB","/drivers/mongodb","2.drivers/mongodb","teenyicons:mongodb-outline",{"title":93,"path":94,"stem":95,"icon":96},"Netlify Blobs","/drivers/netlify","2.drivers/netlify","teenyicons:netlify-solid",{"title":98,"path":99,"stem":100,"icon":101},"Null","/drivers/null","2.drivers/null","bi:trash3-fill",{"title":103,"path":104,"stem":105,"icon":106},"Overlay","/drivers/overlay","2.drivers/overlay","carbon:overlay",{"title":108,"path":109,"stem":110,"icon":111},"PlanetScale","/drivers/planetscale","2.drivers/planetscale","simple-icons:planetscale",{"title":113,"path":114,"stem":115,"icon":116},"Redis","/drivers/redis","2.drivers/redis","simple-icons:redis",{"title":118,"path":119,"stem":120,"icon":121},"S3","/drivers/s3","2.drivers/s3","simple-icons:amazons3",{"title":123,"path":124,"stem":125,"icon":126},"UploadThing","/drivers/uploadthing","2.drivers/uploadthing","qlementine-icons:cloud-16",{"title":128,"path":129,"stem":130,"icon":131},"Upstash","/drivers/upstash","2.drivers/upstash","simple-icons:upstash",{"title":133,"path":134,"stem":135,"icon":136},"Vercel","/drivers/vercel","2.drivers/vercel","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/1.guide/1.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://npmjs.com/package/unstorage",[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(/* opts */);\n\nawait storage.getItem(\"foo:bar\"); // or storage.getItem('/foo/bar')\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","/* opts */",[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},"// or storage.getItem('/foo/bar')\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://github.com/unjs/unstorage/issues/142",[163],"unjs/unstorage#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},"// 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},"// 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/Update 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/Update 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/Update 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/test.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/test.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// 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},"// 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\"); // 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},"// 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// 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},"// 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// 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},"// 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/values. 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/drivers/fs\";\n\n// Create a storage container with default memory storage\nconst storage = createStorage({});\n\nstorage.mount(\"/output\", fsDriver({ base: \"./output\" }));\n\n//  Writes to ./output/test file\nawait storage.setItem(\"/output/test\", \"works\");\n\n// Adds value to in-memory storage\nawait storage.setItem(\"/foo\", \"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/drivers/fs\"",[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},"// 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},"\"/output\"",[187,1081,533],{"class":197},[187,1083,1084],{"class":231},"fsDriver",[187,1086,1087],{"class":197},"({ base: ",[187,1089,1090],{"class":204},"\"./output\"",[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},"//  Writes to ./output/test 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},"\"/output/test\"",[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},"// 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},"\"/foo\"",[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(\"/output\");\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// 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},"// 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\" /* ... */);\nstorage.mount(\"cache:routes\" /* ... */);\n\nstorage.getMount(\"cache:routes:foo:bar\");\n// => { 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}," /* ... */",[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},"// => { 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\" /* ... */);\nstorage.mount(\"cache:sub\" /* ... */);\n\nstorage.getMounts(\"cache:sub\");\n// => [{ base: \"cache:sub\", driver }]\n\nstorage.getMounts(\"cache:\");\n// => [{ base: \"cache:sub\", driver }, { base: \"cache:\", driver }]\n\nstorage.getMounts(\"\");\nstorage.getMounts(\"cache:sub\", { parents: true });\n// => [{ 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},"// => [{ 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},"// => [{ 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},"// => [{ 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\"); // => \u003Cstring>\n\nawait storage.getItemRaw\u003CBuffer>(\"k\"); // => \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},"// => \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},"// => \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\"); // check ok\nstorage.setItemRaw\u003Cstring>(\"k\", \"val\"); // check ok\n\nstorage.setItem\u003Cstring>(\"k\", 123); // ts error\nstorage.setItemRaw\u003Cstring>(\"k\", 123); // 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},"// 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},"// 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\"); // => \u003Cstring>\n\nstorage.setItem(\"k\", \"val\"); // Check ok\nstorage.setItem(\"k\", 123); // 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},"// 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},"// 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); // 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},"// 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\"); // => \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\"); // => \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},"// => \u003CPost>\n",[148,1968,1969,1970,1975,1976,1978,1979,1981],{},"In ",[159,1971,1974],{"href":1972,"rel":1973},"https://www.typescriptlang.org/tsconfig#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\"); // => \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},"// => \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\"); // Ts will prompt you that there are two optional keys: \"foo\" or \"baz\"\nawait storage.getItem(\"baz\"); // => string\nawait storage.setItem(\"foo\", 12); // TS error: \u003Cnumber> is not compatible with \u003Cstring>\nawait storage.setItem(\"foo\", \"val\"); // 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},"// 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},"// => 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.",1783786393202]