[{"data":1,"prerenderedAt":529},["ShallowReactive",2],{"navigation":3,"-guide-custom-driver":137,"-guide-custom-driver-surround":524},[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":22,"body":139,"description":518,"extension":519,"meta":520,"navigation":521,"path":23,"seo":522,"stem":24,"__hash__":523},"content\u002F1.guide\u002F4.custom-driver.md",{"type":140,"value":141,"toc":516,"icon":25},"minimark",[142,154,449,452,512],[143,144,145,146,153],"p",{},"Explore ",[147,148,152],"a",{"href":149,"rel":150},"https:\u002F\u002Fgithub.com\u002Funjs\u002Funstorage\u002Ftree\u002Fmain\u002Fsrc\u002Fdrivers",[151],"nofollow","src\u002Fdrivers"," to get an idea of how to implement them. Methods can:",[155,156,161],"pre",{"className":157,"code":158,"language":159,"meta":160,"style":160},"language-js shiki shiki-themes github-light github-dark github-dark","import { createStorage, defineDriver } from \"unstorage\";\n\nconst myStorageDriver = defineDriver((options) => {\n  return {\n    name: \"my-custom-driver\",\n    options,\n    async hasItem(key, _opts) {},\n    async getItem(key, _opts) {},\n    async setItem(key, value, _opts) {},\n    async removeItem(key, _opts) {},\n    async getKeys(base, _opts) {},\n    async clear(base, _opts) {},\n    async dispose() {},\n    async watch(callback) {},\n  };\n});\n\nconst storage = createStorage({\n  driver: myStorageDriver(),\n});\n","js","",[162,163,164,187,194,227,235,247,253,277,295,318,336,355,373,384,399,405,411,416,432,444],"code",{"__ignoreMap":160},[165,166,169,173,177,180,184],"span",{"class":167,"line":168},"line",1,[165,170,172],{"class":171},"so5gQ","import",[165,174,176],{"class":175},"slsVL"," { createStorage, defineDriver } ",[165,178,179],{"class":171},"from",[165,181,183],{"class":182},"sfrk1"," \"unstorage\"",[165,185,186],{"class":175},";\n",[165,188,190],{"class":167,"line":189},2,[165,191,193],{"emptyLinePlaceholder":192},true,"\n",[165,195,197,200,204,207,211,214,218,221,224],{"class":167,"line":196},3,[165,198,199],{"class":171},"const",[165,201,203],{"class":202},"suiK_"," myStorageDriver",[165,205,206],{"class":171}," =",[165,208,210],{"class":209},"shcOC"," defineDriver",[165,212,213],{"class":175},"((",[165,215,217],{"class":216},"sQHwn","options",[165,219,220],{"class":175},") ",[165,222,223],{"class":171},"=>",[165,225,226],{"class":175}," {\n",[165,228,230,233],{"class":167,"line":229},4,[165,231,232],{"class":171},"  return",[165,234,226],{"class":175},[165,236,238,241,244],{"class":167,"line":237},5,[165,239,240],{"class":175},"    name: ",[165,242,243],{"class":182},"\"my-custom-driver\"",[165,245,246],{"class":175},",\n",[165,248,250],{"class":167,"line":249},6,[165,251,252],{"class":175},"    options,\n",[165,254,256,259,262,265,268,271,274],{"class":167,"line":255},7,[165,257,258],{"class":171},"    async",[165,260,261],{"class":209}," hasItem",[165,263,264],{"class":175},"(",[165,266,267],{"class":216},"key",[165,269,270],{"class":175},", ",[165,272,273],{"class":216},"_opts",[165,275,276],{"class":175},") {},\n",[165,278,280,282,285,287,289,291,293],{"class":167,"line":279},8,[165,281,258],{"class":171},[165,283,284],{"class":209}," getItem",[165,286,264],{"class":175},[165,288,267],{"class":216},[165,290,270],{"class":175},[165,292,273],{"class":216},[165,294,276],{"class":175},[165,296,298,300,303,305,307,309,312,314,316],{"class":167,"line":297},9,[165,299,258],{"class":171},[165,301,302],{"class":209}," setItem",[165,304,264],{"class":175},[165,306,267],{"class":216},[165,308,270],{"class":175},[165,310,311],{"class":216},"value",[165,313,270],{"class":175},[165,315,273],{"class":216},[165,317,276],{"class":175},[165,319,321,323,326,328,330,332,334],{"class":167,"line":320},10,[165,322,258],{"class":171},[165,324,325],{"class":209}," removeItem",[165,327,264],{"class":175},[165,329,267],{"class":216},[165,331,270],{"class":175},[165,333,273],{"class":216},[165,335,276],{"class":175},[165,337,339,341,344,346,349,351,353],{"class":167,"line":338},11,[165,340,258],{"class":171},[165,342,343],{"class":209}," getKeys",[165,345,264],{"class":175},[165,347,348],{"class":216},"base",[165,350,270],{"class":175},[165,352,273],{"class":216},[165,354,276],{"class":175},[165,356,358,360,363,365,367,369,371],{"class":167,"line":357},12,[165,359,258],{"class":171},[165,361,362],{"class":209}," clear",[165,364,264],{"class":175},[165,366,348],{"class":216},[165,368,270],{"class":175},[165,370,273],{"class":216},[165,372,276],{"class":175},[165,374,376,378,381],{"class":167,"line":375},13,[165,377,258],{"class":171},[165,379,380],{"class":209}," dispose",[165,382,383],{"class":175},"() {},\n",[165,385,387,389,392,394,397],{"class":167,"line":386},14,[165,388,258],{"class":171},[165,390,391],{"class":209}," watch",[165,393,264],{"class":175},[165,395,396],{"class":216},"callback",[165,398,276],{"class":175},[165,400,402],{"class":167,"line":401},15,[165,403,404],{"class":175},"  };\n",[165,406,408],{"class":167,"line":407},16,[165,409,410],{"class":175},"});\n",[165,412,414],{"class":167,"line":413},17,[165,415,193],{"emptyLinePlaceholder":192},[165,417,419,421,424,426,429],{"class":167,"line":418},18,[165,420,199],{"class":171},[165,422,423],{"class":202}," storage",[165,425,206],{"class":171},[165,427,428],{"class":209}," createStorage",[165,430,431],{"class":175},"({\n",[165,433,435,438,441],{"class":167,"line":434},19,[165,436,437],{"class":175},"  driver: ",[165,439,440],{"class":209},"myStorageDriver",[165,442,443],{"class":175},"(),\n",[165,445,447],{"class":167,"line":446},20,[165,448,410],{"class":175},[143,450,451],{},"Some important notes:",[453,454,455,463,469,478,481,495],"ul",{},[456,457,458,459,462],"li",{},"Keys should be normalized following ",[162,460,461],{},"foo:bar"," convention",[456,464,465,466],{},"Remove any open watcher and handlers in ",[162,467,468],{},"dispose()",[456,470,471,472,477],{},"Returning a promise is optional, you can return a direct value (see ",[147,473,476],{"href":474,"rel":475},"https:\u002F\u002Fgithub.com\u002Funjs\u002Funstorage\u002Fblob\u002Fmain\u002Fsrc\u002Fdrivers\u002Fmemory.ts",[151],"memory driver",")",[456,479,480],{},"You don't have acces to the mount base",[456,482,483,484,487,488,491,492],{},"Value returned by ",[162,485,486],{},"getItem"," can be a serializable ",[162,489,490],{},"object"," or ",[162,493,494],{},"string",[456,496,497,498,501,502,270,504,507,508,511],{},"When setting ",[162,499,500],{},"watch"," method, the unstorage default handler will be disabled. You are responsible for emitting an event on ",[162,503,486],{},[162,505,506],{},"setItem"," and ",[162,509,510],{},"removeItem",".",[513,514,515],"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 .sQHwn, html code.shiki .sQHwn{--shiki-light:#E36209;--shiki-default:#FFAB70;--shiki-dark:#FFAB70}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":160,"searchDepth":189,"depth":189,"links":517},[],"It is possible to extend unstorage by creating a custom driver.","md",{"icon":25},{"icon":25},{"title":22,"description":518},"7bghgjAoGBdkou5-ZL8XccdktK09rhAJ4JpHLUWnUho",[525,527],{"title":17,"path":18,"stem":19,"description":526,"icon":20,"children":-1},"We can expose unstorage's instance to an HTTP server to allow remote connections.",{"title":27,"path":28,"stem":29,"description":528,"icon":32,"children":-1},"Unstorage has several built-in drivers.",1781217591850]