[{"data":1,"prerenderedAt":3252},["ShallowReactive",2],{"navigation":3,"/docs/blob/usage":137,"/docs/blob/usage-surround":3247},[4,123],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":113},"Docs","i-lucide-book","/docs","docs",[10,34,58,73,84,95,114],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[15,17,21,25,29],{"title":16,"path":12,"stem":13},"Introduction",{"title":18,"path":19,"stem":20},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation",{"title":22,"path":23,"stem":24},"Deploy","/docs/getting-started/deploy","docs/1.getting-started/3.deploy",{"title":26,"path":27,"stem":28},"Migration","/docs/getting-started/migration","docs/1.getting-started/4.migration",{"title":30,"path":31,"stem":32},"Environments","/docs/getting-started/environments","docs/1.getting-started/5.environments","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":57},"Database","/docs/database","docs/2.database/1.index",[39,41,45,49,53],{"title":40,"path":36,"stem":37},"Setup",{"title":42,"path":43,"stem":44},"Schema","/docs/database/schema","docs/2.database/2.schema",{"title":46,"path":47,"stem":48},"Queries","/docs/database/query","docs/2.database/3.query",{"title":50,"path":51,"stem":52},"Migrations","/docs/database/migrations","docs/2.database/4.migrations",{"title":54,"path":55,"stem":56},"CLI","/docs/database/cli","docs/2.database/cli","i-lucide-database",{"title":59,"path":60,"stem":61,"children":62,"icon":72},"Blob","/docs/blob","docs/3.blob/1.index",[63,64,68],{"title":40,"path":60,"stem":61},{"title":65,"path":66,"stem":67},"Upload","/docs/blob/upload","docs/3.blob/2.upload",{"title":69,"path":70,"stem":71},"Blob SDK","/docs/blob/usage","docs/3.blob/3.usage","i-lucide-shapes",{"title":74,"path":75,"stem":76,"children":77,"icon":83},"Key Value","/docs/kv","docs/4.kv/1.index",[78,79],{"title":40,"path":75,"stem":76},{"title":80,"path":81,"stem":82},"KV SDK","/docs/kv/usage","docs/4.kv/2.usage","i-lucide-list",{"title":85,"path":86,"stem":87,"children":88,"icon":94},"Cache","/docs/cache","docs/5.cache/1.index",[89,90],{"title":40,"path":86,"stem":87},{"title":91,"path":92,"stem":93},"Usage","/docs/cache/usage","docs/5.cache/2.usage","i-lucide-zap",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":113},"Guides","i-lucide-book-text","/docs/guides","docs/6.guides",[101,105,109],{"title":102,"path":103,"stem":104},"Pre-rendering","/docs/guides/pre-rendering","docs/6.guides/1.pre-rendering",{"title":106,"path":107,"stem":108},"Realtime","/docs/guides/realtime","docs/6.guides/2.realtime",{"title":110,"path":111,"stem":112},"CI/CD","/docs/guides/ci-cd","docs/6.guides/3.ci-cd",false,{"title":115,"path":116,"stem":117,"children":118,"page":113},"Reference","/docs/reference","docs/7.reference",[119],{"title":120,"path":121,"stem":122},"Environment Variables","/docs/reference/environment-variables","docs/7.reference/1.environment-variables",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":113},"Changelog","i-lucide-megaphone","/changelog","changelog",[129,133],{"title":130,"path":131,"stem":132},"NuxtHub Multi-Vendor is now available","/changelog/nuxthub-multi-vendor","changelog/nuxthub-multi-vendor",{"title":134,"path":135,"stem":136},"Self-Hosting First & Cloud-Agnostic Future","/changelog/self-hosting-first","changelog/self-hosting-first",{"id":138,"title":139,"body":140,"description":3240,"extension":3241,"links":3242,"meta":3243,"navigation":3244,"path":70,"seo":3245,"stem":71,"__hash__":3246},"docs/docs/3.blob/3.usage.md","Using the Blob SDK",{"type":141,"value":142,"toc":3208},"minimark",[143,147,152,161,167,208,215,222,228,251,261,265,268,374,379,382,401,408,413,456,460,463,651,655,658,712,716,722,778,782,785,903,907,914,1112,1119,1168,1172,1179,1296,1301,1316,1345,1348,1357,1360,1369,1373,1376,1495,1500,1503,1534,1537,1542,1545,1547,1660,1664,1667,1746,1751,1757,1788,1791,1795,1798,1814,1818,1821,2163,2171,2176,2327,2330,2381,2384,2386,2490,2494,2499,2577,2582,2660,2665,2731,2735,2742,2745,2886,2891,2897,2900,2965,2974,2977,2983,2986,2989,2993,2999,3002,3078,3092,3095,3198,3201,3204],[144,145,146],"p",{},"The Blob SDK provides access to Blob Storage through a unified API that works across all storage providers (Cloudflare R2, S3, Vercel Blob, filesystem).",[148,149,151],"h2",{"id":150},"importing-the-blob-storage","Importing the Blob storage",[153,154,156,157],"h3",{"id":155},"recommended-nuxthubblob","Recommended: ",[158,159,160],"code",{},"@nuxthub/blob",[144,162,163,164,166],{},"Use ",[158,165,160],{}," to import the Blob storage. This works everywhere (Nuxt server routes, Nitro server routes, Workflows, etc.):",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { blob } from '@nuxthub/blob'\n","ts","",[158,175,176],{"__ignoreMap":173},[177,178,181,185,189,193,196,199,202,205],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"s7zQu","import",[177,186,188],{"class":187},"sMK4o"," {",[177,190,192],{"class":191},"sTEyZ"," blob",[177,194,195],{"class":187}," }",[177,197,198],{"class":183}," from",[177,200,201],{"class":187}," '",[177,203,160],{"class":204},"sfazB",[177,206,207],{"class":187},"'\n",[209,210,211,214],"tip",{},[158,212,213],{},"blob"," is auto-imported on server-side in Nuxt, you can directly use it without importing it.",[153,216,218,219],{"id":217},"legacy-hubblob","Legacy: ",[158,220,221],{},"hub:blob",[144,223,224,225,227],{},"The virtual module ",[158,226,221],{}," is still supported for backwards compatibility:",[168,229,231],{"className":170,"code":230,"language":172,"meta":173,"style":173},"import { blob } from 'hub:blob'\n",[158,232,233],{"__ignoreMap":173},[177,234,235,237,239,241,243,245,247,249],{"class":179,"line":180},[177,236,184],{"class":183},[177,238,188],{"class":187},[177,240,192],{"class":191},[177,242,195],{"class":187},[177,244,198],{"class":183},[177,246,201],{"class":187},[177,248,221],{"class":204},[177,250,207],{"class":187},[252,253,254,255,257,258,260],"note",{},"While ",[158,256,221],{}," still works in Nuxt projects, we recommend using ",[158,259,160],{}," for better compatibility with external bundlers and workflows.",[148,262,264],{"id":263},"list-blobs","List blobs",[144,266,267],{},"This example create an API route to list the first 10 blobs in the Blob storage.",[168,269,272],{"className":170,"code":270,"filename":271,"language":172,"meta":173,"style":173},"export default eventHandler(async () => {\n  const { blobs } = await blob.list({ limit: 10 })\n\n  return blobs\n})\n","server/api/files.get.ts",[158,273,274,302,350,357,366],{"__ignoreMap":173},[177,275,276,279,282,286,289,293,296,299],{"class":179,"line":180},[177,277,278],{"class":183},"export",[177,280,281],{"class":183}," default",[177,283,285],{"class":284},"s2Zo4"," eventHandler",[177,287,288],{"class":191},"(",[177,290,292],{"class":291},"spNyl","async",[177,294,295],{"class":187}," ()",[177,297,298],{"class":291}," =>",[177,300,301],{"class":187}," {\n",[177,303,305,308,310,313,315,318,321,323,326,329,332,335,338,341,345,347],{"class":179,"line":304},2,[177,306,307],{"class":291},"  const",[177,309,188],{"class":187},[177,311,312],{"class":191}," blobs",[177,314,195],{"class":187},[177,316,317],{"class":187}," =",[177,319,320],{"class":183}," await",[177,322,192],{"class":191},[177,324,325],{"class":187},".",[177,327,328],{"class":284},"list",[177,330,288],{"class":331},"swJcz",[177,333,334],{"class":187},"{",[177,336,337],{"class":331}," limit",[177,339,340],{"class":187},":",[177,342,344],{"class":343},"sbssI"," 10",[177,346,195],{"class":187},[177,348,349],{"class":331},")\n",[177,351,353],{"class":179,"line":352},3,[177,354,356],{"emptyLinePlaceholder":355},true,"\n",[177,358,360,363],{"class":179,"line":359},4,[177,361,362],{"class":183},"  return",[177,364,365],{"class":191}," blobs\n",[177,367,369,372],{"class":179,"line":368},5,[177,370,371],{"class":187},"}",[177,373,349],{"class":191},[153,375,376],{"id":328},[158,377,378],{},"list()",[144,380,381],{},"Returns a paginated list of blobs (metadata only).",[168,383,385],{"className":170,"code":384,"language":172,"meta":173,"style":173},"await blob.list(options)\n",[158,386,387],{"__ignoreMap":173},[177,388,389,392,394,396,398],{"class":179,"line":180},[177,390,391],{"class":183},"await",[177,393,192],{"class":191},[177,395,325],{"class":187},[177,397,328],{"class":284},[177,399,400],{"class":191},"(options)\n",[252,402,403,404,407],{},"When using the local filesystem driver, the ",[158,405,406],{},"limit"," option is ignored and all blobs are returned.",[409,410,412],"h4",{"id":411},"params","Params",[414,415,416],"field-group",{},[417,418,421,424],"field",{"name":419,"type":420},"options","Object",[144,422,423],{},"The list options.",[425,426,427,434,439,443],"collapsible",{},[417,428,430,431,325],{"name":406,"type":429},"Number","The maximum number of blobs to return per request. Defaults to ",[158,432,433],{},"1000",[417,435,438],{"name":436,"type":437},"prefix","String","Filters the results to only those that begin with the specified prefix.",[417,440,442],{"name":441,"type":437},"cursor","The cursor to continue from a previous list operation.",[417,444,447,448,451,452,455],{"name":445,"type":446},"folded","Boolean","If ",[158,449,450],{},"true",", the list will be folded using ",[158,453,454],{},"/"," separator and list of folders will be returned.",[409,457,459],{"id":458},"return","Return",[144,461,462],{},"Returns a json object with the following structure:",[168,464,468],{"className":465,"code":466,"language":467,"meta":173,"style":173},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  blobs:  {\n    pathname: string\n    contentType: string | undefined\n    size: number\n    httpEtag: string | undefined\n    uploadedAt: Date\n    httpMetadata: Record\u003Cstring, string>\n    customMetadata: Record\u003Cstring, string>\n    url?: string\n  }[]\n  hasMore: boolean\n  cursor?: string\n  folders?: string[]\n}\n","ts-type",[158,469,470,475,485,496,512,522,536,547,572,592,603,612,623,633,645],{"__ignoreMap":173},[177,471,472],{"class":179,"line":180},[177,473,474],{"class":187},"{\n",[177,476,477,480,482],{"class":179,"line":304},[177,478,479],{"class":331},"  blobs",[177,481,340],{"class":187},[177,483,484],{"class":187},"  {\n",[177,486,487,490,492],{"class":179,"line":352},[177,488,489],{"class":331},"    pathname",[177,491,340],{"class":187},[177,493,495],{"class":494},"sBMFI"," string\n",[177,497,498,501,503,506,509],{"class":179,"line":359},[177,499,500],{"class":331},"    contentType",[177,502,340],{"class":187},[177,504,505],{"class":494}," string",[177,507,508],{"class":187}," |",[177,510,511],{"class":494}," undefined\n",[177,513,514,517,519],{"class":179,"line":368},[177,515,516],{"class":331},"    size",[177,518,340],{"class":187},[177,520,521],{"class":494}," number\n",[177,523,525,528,530,532,534],{"class":179,"line":524},6,[177,526,527],{"class":331},"    httpEtag",[177,529,340],{"class":187},[177,531,505],{"class":494},[177,533,508],{"class":187},[177,535,511],{"class":494},[177,537,539,542,544],{"class":179,"line":538},7,[177,540,541],{"class":331},"    uploadedAt",[177,543,340],{"class":187},[177,545,546],{"class":494}," Date\n",[177,548,550,553,555,558,561,564,567,569],{"class":179,"line":549},8,[177,551,552],{"class":331},"    httpMetadata",[177,554,340],{"class":187},[177,556,557],{"class":494}," Record",[177,559,560],{"class":187},"\u003C",[177,562,563],{"class":494},"string",[177,565,566],{"class":187},",",[177,568,505],{"class":494},[177,570,571],{"class":187},">\n",[177,573,575,578,580,582,584,586,588,590],{"class":179,"line":574},9,[177,576,577],{"class":331},"    customMetadata",[177,579,340],{"class":187},[177,581,557],{"class":494},[177,583,560],{"class":187},[177,585,563],{"class":494},[177,587,566],{"class":187},[177,589,505],{"class":494},[177,591,571],{"class":187},[177,593,595,598,601],{"class":179,"line":594},10,[177,596,597],{"class":331},"    url",[177,599,600],{"class":187},"?:",[177,602,495],{"class":494},[177,604,606,609],{"class":179,"line":605},11,[177,607,608],{"class":187},"  }",[177,610,611],{"class":191},"[]\n",[177,613,615,618,620],{"class":179,"line":614},12,[177,616,617],{"class":331},"  hasMore",[177,619,340],{"class":187},[177,621,622],{"class":494}," boolean\n",[177,624,626,629,631],{"class":179,"line":625},13,[177,627,628],{"class":331},"  cursor",[177,630,600],{"class":187},[177,632,495],{"class":494},[177,634,636,639,641,643],{"class":179,"line":635},14,[177,637,638],{"class":331},"  folders",[177,640,600],{"class":187},[177,642,505],{"class":494},[177,644,611],{"class":191},[177,646,648],{"class":179,"line":647},15,[177,649,650],{"class":187},"}\n",[153,652,654],{"id":653},"list-with-prefix","List with prefix",[144,656,657],{},"Filter blobs by a prefix to organize files into directories:",[168,659,661],{"className":170,"code":660,"language":172,"meta":173,"style":173},"// List all files in the \"images/\" directory\nconst { blobs } = await blob.list({ prefix: 'images/' })\n",[158,662,663,669],{"__ignoreMap":173},[177,664,665],{"class":179,"line":180},[177,666,668],{"class":667},"sHwdD","// List all files in the \"images/\" directory\n",[177,670,671,674,676,679,681,683,685,687,689,691,693,695,698,700,702,705,708,710],{"class":179,"line":304},[177,672,673],{"class":291},"const",[177,675,188],{"class":187},[177,677,678],{"class":191}," blobs ",[177,680,371],{"class":187},[177,682,317],{"class":187},[177,684,320],{"class":183},[177,686,192],{"class":191},[177,688,325],{"class":187},[177,690,328],{"class":284},[177,692,288],{"class":191},[177,694,334],{"class":187},[177,696,697],{"class":331}," prefix",[177,699,340],{"class":187},[177,701,201],{"class":187},[177,703,704],{"class":204},"images/",[177,706,707],{"class":187},"'",[177,709,195],{"class":187},[177,711,349],{"class":191},[153,713,715],{"id":714},"list-with-folders","List with folders",[144,717,163,718,721],{},[158,719,720],{},"folded: true"," to get a folder-like structure:",[168,723,725],{"className":170,"code":724,"language":172,"meta":173,"style":173},"const { blobs, folders } = await blob.list({ folded: true })\n\n// folders: ['images/', 'documents/', 'videos/']\n",[158,726,727,769,773],{"__ignoreMap":173},[177,728,729,731,733,735,737,740,742,744,746,748,750,752,754,756,759,761,765,767],{"class":179,"line":180},[177,730,673],{"class":291},[177,732,188],{"class":187},[177,734,312],{"class":191},[177,736,566],{"class":187},[177,738,739],{"class":191}," folders ",[177,741,371],{"class":187},[177,743,317],{"class":187},[177,745,320],{"class":183},[177,747,192],{"class":191},[177,749,325],{"class":187},[177,751,328],{"class":284},[177,753,288],{"class":191},[177,755,334],{"class":187},[177,757,758],{"class":331}," folded",[177,760,340],{"class":187},[177,762,764],{"class":763},"sfNiH"," true",[177,766,195],{"class":187},[177,768,349],{"class":191},[177,770,771],{"class":179,"line":304},[177,772,356],{"emptyLinePlaceholder":355},[177,774,775],{"class":179,"line":352},[177,776,777],{"class":667},"// folders: ['images/', 'documents/', 'videos/']\n",[153,779,781],{"id":780},"pagination","Pagination",[144,783,784],{},"Fetch all blobs using cursor-based pagination:",[168,786,788],{"className":170,"code":787,"language":172,"meta":173,"style":173},"let allBlobs = []\nlet cursor = null\n\ndo {\n  const result = await blob.list({ cursor })\n  allBlobs.push(...result.blobs)\n  cursor = result.cursor\n} while (cursor)\n",[158,789,790,804,816,820,827,855,880,893],{"__ignoreMap":173},[177,791,792,795,798,801],{"class":179,"line":180},[177,793,794],{"class":291},"let",[177,796,797],{"class":191}," allBlobs ",[177,799,800],{"class":187},"=",[177,802,803],{"class":191}," []\n",[177,805,806,808,811,813],{"class":179,"line":304},[177,807,794],{"class":291},[177,809,810],{"class":191}," cursor ",[177,812,800],{"class":187},[177,814,815],{"class":187}," null\n",[177,817,818],{"class":179,"line":352},[177,819,356],{"emptyLinePlaceholder":355},[177,821,822,825],{"class":179,"line":359},[177,823,824],{"class":183},"do",[177,826,301],{"class":187},[177,828,829,831,834,836,838,840,842,844,846,848,851,853],{"class":179,"line":368},[177,830,307],{"class":291},[177,832,833],{"class":191}," result",[177,835,317],{"class":187},[177,837,320],{"class":183},[177,839,192],{"class":191},[177,841,325],{"class":187},[177,843,328],{"class":284},[177,845,288],{"class":331},[177,847,334],{"class":187},[177,849,850],{"class":191}," cursor",[177,852,195],{"class":187},[177,854,349],{"class":331},[177,856,857,860,862,865,867,870,873,875,878],{"class":179,"line":524},[177,858,859],{"class":191},"  allBlobs",[177,861,325],{"class":187},[177,863,864],{"class":284},"push",[177,866,288],{"class":331},[177,868,869],{"class":187},"...",[177,871,872],{"class":191},"result",[177,874,325],{"class":187},[177,876,877],{"class":191},"blobs",[177,879,349],{"class":331},[177,881,882,884,886,888,890],{"class":179,"line":538},[177,883,628],{"class":191},[177,885,317],{"class":187},[177,887,833],{"class":191},[177,889,325],{"class":187},[177,891,892],{"class":191},"cursor\n",[177,894,895,897,900],{"class":179,"line":549},[177,896,371],{"class":187},[177,898,899],{"class":183}," while",[177,901,902],{"class":191}," (cursor)\n",[148,904,906],{"id":905},"serve-a-blob","Serve a blob",[144,908,909,910,913],{},"This example create a server route on ",[158,911,912],{},"/images/[...pathname]"," to serve a blob by its pathname.",[168,915,918],{"className":170,"code":916,"filename":917,"language":172,"meta":173,"style":173},"import { blob } from 'hub:blob'\nimport { createError, eventHandler, getRouterParam } from 'h3'\n\nexport default eventHandler(async (event) => {\n  const pathname = getRouterParam(event, 'pathname')\n  if (!pathname) {\n    throw createError({ statusCode: 404, statusMessage: 'Not Found' })\n  }\n\n  return blob.serve(event, pathname)\n})\n","server/routes/images/[...pathname].get.ts",[158,919,920,938,966,970,996,1022,1039,1076,1081,1085,1106],{"__ignoreMap":173},[177,921,922,924,926,928,930,932,934,936],{"class":179,"line":180},[177,923,184],{"class":183},[177,925,188],{"class":187},[177,927,192],{"class":191},[177,929,195],{"class":187},[177,931,198],{"class":183},[177,933,201],{"class":187},[177,935,221],{"class":204},[177,937,207],{"class":187},[177,939,940,942,944,947,949,951,953,956,958,960,962,964],{"class":179,"line":304},[177,941,184],{"class":183},[177,943,188],{"class":187},[177,945,946],{"class":191}," createError",[177,948,566],{"class":187},[177,950,285],{"class":191},[177,952,566],{"class":187},[177,954,955],{"class":191}," getRouterParam",[177,957,195],{"class":187},[177,959,198],{"class":183},[177,961,201],{"class":187},[177,963,153],{"class":204},[177,965,207],{"class":187},[177,967,968],{"class":179,"line":352},[177,969,356],{"emptyLinePlaceholder":355},[177,971,972,974,976,978,980,982,985,989,992,994],{"class":179,"line":359},[177,973,278],{"class":183},[177,975,281],{"class":183},[177,977,285],{"class":284},[177,979,288],{"class":191},[177,981,292],{"class":291},[177,983,984],{"class":187}," (",[177,986,988],{"class":987},"sHdIc","event",[177,990,991],{"class":187},")",[177,993,298],{"class":291},[177,995,301],{"class":187},[177,997,998,1000,1003,1005,1007,1009,1011,1013,1015,1018,1020],{"class":179,"line":368},[177,999,307],{"class":291},[177,1001,1002],{"class":191}," pathname",[177,1004,317],{"class":187},[177,1006,955],{"class":284},[177,1008,288],{"class":331},[177,1010,988],{"class":191},[177,1012,566],{"class":187},[177,1014,201],{"class":187},[177,1016,1017],{"class":204},"pathname",[177,1019,707],{"class":187},[177,1021,349],{"class":331},[177,1023,1024,1027,1029,1032,1034,1037],{"class":179,"line":524},[177,1025,1026],{"class":183},"  if",[177,1028,984],{"class":331},[177,1030,1031],{"class":187},"!",[177,1033,1017],{"class":191},[177,1035,1036],{"class":331},") ",[177,1038,474],{"class":187},[177,1040,1041,1044,1046,1048,1050,1053,1055,1058,1060,1063,1065,1067,1070,1072,1074],{"class":179,"line":538},[177,1042,1043],{"class":183},"    throw",[177,1045,946],{"class":284},[177,1047,288],{"class":331},[177,1049,334],{"class":187},[177,1051,1052],{"class":331}," statusCode",[177,1054,340],{"class":187},[177,1056,1057],{"class":343}," 404",[177,1059,566],{"class":187},[177,1061,1062],{"class":331}," statusMessage",[177,1064,340],{"class":187},[177,1066,201],{"class":187},[177,1068,1069],{"class":204},"Not Found",[177,1071,707],{"class":187},[177,1073,195],{"class":187},[177,1075,349],{"class":331},[177,1077,1078],{"class":179,"line":549},[177,1079,1080],{"class":187},"  }\n",[177,1082,1083],{"class":179,"line":574},[177,1084,356],{"emptyLinePlaceholder":355},[177,1086,1087,1089,1091,1093,1096,1098,1100,1102,1104],{"class":179,"line":594},[177,1088,362],{"class":183},[177,1090,192],{"class":191},[177,1092,325],{"class":187},[177,1094,1095],{"class":284},"serve",[177,1097,288],{"class":331},[177,1099,988],{"class":191},[177,1101,566],{"class":187},[177,1103,1002],{"class":191},[177,1105,349],{"class":331},[177,1107,1108,1110],{"class":179,"line":605},[177,1109,371],{"class":187},[177,1111,349],{"class":191},[144,1113,1114,1115,1118],{},"To display the image in your application, you can use the ",[158,1116,1117],{},"\u003Cimg>"," tag with the pathname of the blob.",[168,1120,1125],{"className":1121,"code":1122,"filename":1123,"language":1124,"meta":173,"style":173},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ctemplate>\n  \u003Cimg src=\"/images/my-image.jpg\">\n\u003C/template>\n","pages/index.vue","vue",[158,1126,1127,1136,1159],{"__ignoreMap":173},[177,1128,1129,1131,1134],{"class":179,"line":180},[177,1130,560],{"class":187},[177,1132,1133],{"class":331},"template",[177,1135,571],{"class":187},[177,1137,1138,1141,1144,1147,1149,1152,1155,1157],{"class":179,"line":304},[177,1139,1140],{"class":187},"  \u003C",[177,1142,1143],{"class":331},"img",[177,1145,1146],{"class":291}," src",[177,1148,800],{"class":187},[177,1150,1151],{"class":187},"\"",[177,1153,1154],{"class":204},"/images/my-image.jpg",[177,1156,1151],{"class":187},[177,1158,571],{"class":187},[177,1160,1161,1164,1166],{"class":179,"line":352},[177,1162,1163],{"class":187},"\u003C/",[177,1165,1133],{"class":331},[177,1167,571],{"class":187},[1169,1170,1171],"important",{},"To prevent XSS attacks, make sure to control the Content type of the blob you serve.",[144,1173,1174,1175,1178],{},"You can also set a ",[158,1176,1177],{},"Content-Security-Policy"," header for additional security:",[168,1180,1182],{"className":170,"code":1181,"filename":917,"language":172,"meta":173,"style":173},"export default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n\n  setHeader(event, 'Content-Security-Policy', 'default-src \\'none\\';')\n  return blob.serve(event, pathname)\n})\n",[158,1183,1184,1206,1227,1231,1270,1290],{"__ignoreMap":173},[177,1185,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204],{"class":179,"line":180},[177,1187,278],{"class":183},[177,1189,281],{"class":183},[177,1191,285],{"class":284},[177,1193,288],{"class":191},[177,1195,292],{"class":291},[177,1197,984],{"class":187},[177,1199,988],{"class":987},[177,1201,991],{"class":187},[177,1203,298],{"class":291},[177,1205,301],{"class":187},[177,1207,1208,1210,1212,1214,1216,1218,1221,1223,1225],{"class":179,"line":304},[177,1209,307],{"class":291},[177,1211,188],{"class":187},[177,1213,1002],{"class":191},[177,1215,195],{"class":187},[177,1217,317],{"class":187},[177,1219,1220],{"class":284}," getRouterParams",[177,1222,288],{"class":331},[177,1224,988],{"class":191},[177,1226,349],{"class":331},[177,1228,1229],{"class":179,"line":352},[177,1230,356],{"emptyLinePlaceholder":355},[177,1232,1233,1236,1238,1240,1242,1244,1246,1248,1250,1252,1255,1258,1261,1263,1266,1268],{"class":179,"line":359},[177,1234,1235],{"class":284},"  setHeader",[177,1237,288],{"class":331},[177,1239,988],{"class":191},[177,1241,566],{"class":187},[177,1243,201],{"class":187},[177,1245,1177],{"class":204},[177,1247,707],{"class":187},[177,1249,566],{"class":187},[177,1251,201],{"class":187},[177,1253,1254],{"class":204},"default-src ",[177,1256,1257],{"class":191},"\\'",[177,1259,1260],{"class":204},"none",[177,1262,1257],{"class":191},[177,1264,1265],{"class":204},";",[177,1267,707],{"class":187},[177,1269,349],{"class":331},[177,1271,1272,1274,1276,1278,1280,1282,1284,1286,1288],{"class":179,"line":368},[177,1273,362],{"class":183},[177,1275,192],{"class":191},[177,1277,325],{"class":187},[177,1279,1095],{"class":284},[177,1281,288],{"class":331},[177,1283,988],{"class":191},[177,1285,566],{"class":187},[177,1287,1002],{"class":191},[177,1289,349],{"class":331},[177,1291,1292,1294],{"class":179,"line":524},[177,1293,371],{"class":187},[177,1295,349],{"class":191},[153,1297,1298],{"id":1095},[158,1299,1300],{},"serve()",[144,1302,1303,1304,1307,1308,1311,1312,1315],{},"Returns a blob's data and sets ",[158,1305,1306],{},"Content-Type",", ",[158,1309,1310],{},"Content-Length",", and ",[158,1313,1314],{},"ETag"," headers.",[168,1317,1319],{"className":170,"code":1318,"language":172,"meta":173,"style":173},"await blob.serve(event, 'images/my-image.jpg')\n",[158,1320,1321],{"__ignoreMap":173},[177,1322,1323,1325,1327,1329,1331,1334,1336,1338,1341,1343],{"class":179,"line":180},[177,1324,391],{"class":183},[177,1326,192],{"class":191},[177,1328,325],{"class":187},[177,1330,1095],{"class":284},[177,1332,1333],{"class":191},"(event",[177,1335,566],{"class":187},[177,1337,201],{"class":187},[177,1339,1340],{"class":204},"images/my-image.jpg",[177,1342,707],{"class":187},[177,1344,349],{"class":191},[409,1346,412],{"id":1347},"params-1",[414,1349,1350,1354],{},[417,1351,1353],{"name":988,"type":1352,":required":450},"H3Event","Handler's event, needed to set headers.",[417,1355,1356],{"name":1017,"type":437,":required":450},"The pathname of the blob to serve.",[409,1358,459],{"id":1359},"return-1",[144,1361,1362,1363,1307,1365,1311,1367,1315],{},"Returns the blob's raw data and sets ",[158,1364,1306],{},[158,1366,1310],{},[158,1368,1314],{},[148,1370,1372],{"id":1371},"get-blob-metadata","Get blob metadata",[144,1374,1375],{},"This example create an API route to get a blob's metadata by its pathname.",[168,1377,1380],{"className":170,"code":1378,"filename":1379,"language":172,"meta":173,"style":173},"import { blob } from '@nuxthub/blob'\nimport { eventHandler, getRouterParams } from 'h3'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n\n  return blob.head(pathname)\n})\n","server/api/files/[...pathname].get.ts",[158,1381,1382,1400,1422,1426,1448,1468,1472,1489],{"__ignoreMap":173},[177,1383,1384,1386,1388,1390,1392,1394,1396,1398],{"class":179,"line":180},[177,1385,184],{"class":183},[177,1387,188],{"class":187},[177,1389,192],{"class":191},[177,1391,195],{"class":187},[177,1393,198],{"class":183},[177,1395,201],{"class":187},[177,1397,160],{"class":204},[177,1399,207],{"class":187},[177,1401,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420],{"class":179,"line":304},[177,1403,184],{"class":183},[177,1405,188],{"class":187},[177,1407,285],{"class":191},[177,1409,566],{"class":187},[177,1411,1220],{"class":191},[177,1413,195],{"class":187},[177,1415,198],{"class":183},[177,1417,201],{"class":187},[177,1419,153],{"class":204},[177,1421,207],{"class":187},[177,1423,1424],{"class":179,"line":352},[177,1425,356],{"emptyLinePlaceholder":355},[177,1427,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446],{"class":179,"line":359},[177,1429,278],{"class":183},[177,1431,281],{"class":183},[177,1433,285],{"class":284},[177,1435,288],{"class":191},[177,1437,292],{"class":291},[177,1439,984],{"class":187},[177,1441,988],{"class":987},[177,1443,991],{"class":187},[177,1445,298],{"class":291},[177,1447,301],{"class":187},[177,1449,1450,1452,1454,1456,1458,1460,1462,1464,1466],{"class":179,"line":368},[177,1451,307],{"class":291},[177,1453,188],{"class":187},[177,1455,1002],{"class":191},[177,1457,195],{"class":187},[177,1459,317],{"class":187},[177,1461,1220],{"class":284},[177,1463,288],{"class":331},[177,1465,988],{"class":191},[177,1467,349],{"class":331},[177,1469,1470],{"class":179,"line":524},[177,1471,356],{"emptyLinePlaceholder":355},[177,1473,1474,1476,1478,1480,1483,1485,1487],{"class":179,"line":538},[177,1475,362],{"class":183},[177,1477,192],{"class":191},[177,1479,325],{"class":187},[177,1481,1482],{"class":284},"head",[177,1484,288],{"class":331},[177,1486,1017],{"class":191},[177,1488,349],{"class":331},[177,1490,1491,1493],{"class":179,"line":549},[177,1492,371],{"class":187},[177,1494,349],{"class":191},[153,1496,1497],{"id":1482},[158,1498,1499],{},"head()",[144,1501,1502],{},"Returns a blob's metadata without fetching the content.",[168,1504,1506],{"className":170,"code":1505,"language":172,"meta":173,"style":173},"await blob.head('images/avatar.png')\n// { pathname, contentType, size, uploadedAt, ... }\n",[158,1507,1508,1529],{"__ignoreMap":173},[177,1509,1510,1512,1514,1516,1518,1520,1522,1525,1527],{"class":179,"line":180},[177,1511,391],{"class":183},[177,1513,192],{"class":191},[177,1515,325],{"class":187},[177,1517,1482],{"class":284},[177,1519,288],{"class":191},[177,1521,707],{"class":187},[177,1523,1524],{"class":204},"images/avatar.png",[177,1526,707],{"class":187},[177,1528,349],{"class":191},[177,1530,1531],{"class":179,"line":304},[177,1532,1533],{"class":667},"// { pathname, contentType, size, uploadedAt, ... }\n",[409,1535,412],{"id":1536},"params-2",[414,1538,1539],{},[417,1540,1541],{"name":1017,"type":437,":required":450},"The pathname of the blob.",[409,1543,459],{"id":1544},"return-2",[144,1546,462],{},[168,1548,1550],{"className":465,"code":1549,"language":467,"meta":173,"style":173},"{\n  pathname: string\n  contentType: string | undefined\n  size: number\n  httpEtag: string | undefined\n  uploadedAt: Date\n  httpMetadata: Record\u003Cstring, string>\n  customMetadata: Record\u003Cstring, string>\n  url?: string\n}\n",[158,1551,1552,1556,1565,1578,1587,1600,1609,1628,1647,1656],{"__ignoreMap":173},[177,1553,1554],{"class":179,"line":180},[177,1555,474],{"class":187},[177,1557,1558,1561,1563],{"class":179,"line":304},[177,1559,1560],{"class":331},"  pathname",[177,1562,340],{"class":187},[177,1564,495],{"class":494},[177,1566,1567,1570,1572,1574,1576],{"class":179,"line":352},[177,1568,1569],{"class":331},"  contentType",[177,1571,340],{"class":187},[177,1573,505],{"class":494},[177,1575,508],{"class":187},[177,1577,511],{"class":494},[177,1579,1580,1583,1585],{"class":179,"line":359},[177,1581,1582],{"class":331},"  size",[177,1584,340],{"class":187},[177,1586,521],{"class":494},[177,1588,1589,1592,1594,1596,1598],{"class":179,"line":368},[177,1590,1591],{"class":331},"  httpEtag",[177,1593,340],{"class":187},[177,1595,505],{"class":494},[177,1597,508],{"class":187},[177,1599,511],{"class":494},[177,1601,1602,1605,1607],{"class":179,"line":524},[177,1603,1604],{"class":331},"  uploadedAt",[177,1606,340],{"class":187},[177,1608,546],{"class":494},[177,1610,1611,1614,1616,1618,1620,1622,1624,1626],{"class":179,"line":538},[177,1612,1613],{"class":331},"  httpMetadata",[177,1615,340],{"class":187},[177,1617,557],{"class":494},[177,1619,560],{"class":187},[177,1621,563],{"class":494},[177,1623,566],{"class":187},[177,1625,505],{"class":494},[177,1627,571],{"class":187},[177,1629,1630,1633,1635,1637,1639,1641,1643,1645],{"class":179,"line":549},[177,1631,1632],{"class":331},"  customMetadata",[177,1634,340],{"class":187},[177,1636,557],{"class":494},[177,1638,560],{"class":187},[177,1640,563],{"class":494},[177,1642,566],{"class":187},[177,1644,505],{"class":494},[177,1646,571],{"class":187},[177,1648,1649,1652,1654],{"class":179,"line":574},[177,1650,1651],{"class":331},"  url",[177,1653,600],{"class":187},[177,1655,495],{"class":494},[177,1657,1658],{"class":179,"line":594},[177,1659,650],{"class":187},[148,1661,1663],{"id":1662},"get-blob-body","Get blob body",[144,1665,1666],{},"This example show a server code to get a blob's content by its pathname, and convert it to a text or buffer.",[168,1668,1670],{"className":170,"code":1669,"language":172,"meta":173,"style":173},"const file = await blob.get('documents/report.pdf')\n\nif (file) {\n  const text = await file.text()\n  // or: const buffer = await file.arrayBuffer()\n}\n",[158,1671,1672,1701,1705,1715,1737,1742],{"__ignoreMap":173},[177,1673,1674,1676,1679,1681,1683,1685,1687,1690,1692,1694,1697,1699],{"class":179,"line":180},[177,1675,673],{"class":291},[177,1677,1678],{"class":191}," file ",[177,1680,800],{"class":187},[177,1682,320],{"class":183},[177,1684,192],{"class":191},[177,1686,325],{"class":187},[177,1688,1689],{"class":284},"get",[177,1691,288],{"class":191},[177,1693,707],{"class":187},[177,1695,1696],{"class":204},"documents/report.pdf",[177,1698,707],{"class":187},[177,1700,349],{"class":191},[177,1702,1703],{"class":179,"line":304},[177,1704,356],{"emptyLinePlaceholder":355},[177,1706,1707,1710,1713],{"class":179,"line":352},[177,1708,1709],{"class":183},"if",[177,1711,1712],{"class":191}," (file) ",[177,1714,474],{"class":187},[177,1716,1717,1719,1722,1724,1726,1729,1731,1734],{"class":179,"line":359},[177,1718,307],{"class":291},[177,1720,1721],{"class":191}," text",[177,1723,317],{"class":187},[177,1725,320],{"class":183},[177,1727,1728],{"class":191}," file",[177,1730,325],{"class":187},[177,1732,1733],{"class":284},"text",[177,1735,1736],{"class":331},"()\n",[177,1738,1739],{"class":179,"line":368},[177,1740,1741],{"class":667},"  // or: const buffer = await file.arrayBuffer()\n",[177,1743,1744],{"class":179,"line":524},[177,1745,650],{"class":187},[153,1747,1748],{"id":1689},[158,1749,1750],{},"get()",[144,1752,1753,1754,1756],{},"Returns a blob's content as a ",[158,1755,59],{}," object.",[168,1758,1760],{"className":170,"code":1759,"language":172,"meta":173,"style":173},"const file = await blob.get('documents/report.pdf')\n",[158,1761,1762],{"__ignoreMap":173},[177,1763,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786],{"class":179,"line":180},[177,1765,673],{"class":291},[177,1767,1678],{"class":191},[177,1769,800],{"class":187},[177,1771,320],{"class":183},[177,1773,192],{"class":191},[177,1775,325],{"class":187},[177,1777,1689],{"class":284},[177,1779,288],{"class":191},[177,1781,707],{"class":187},[177,1783,1696],{"class":204},[177,1785,707],{"class":187},[177,1787,349],{"class":191},[409,1789,412],{"id":1790},"params-3",[414,1792,1793],{},[417,1794,1541],{"name":1017,"type":437,":required":450},[409,1796,459],{"id":1797},"return-3",[144,1799,1800,1801,1809,1810,1813],{},"Returns a ",[1802,1803,1807],"a",{"href":1804,"rel":1805},"https://developer.mozilla.org/en-US/docs/Web/API/Blob",[1806],"nofollow",[158,1808,59],{}," or ",[158,1811,1812],{},"null"," if not found.",[148,1815,1817],{"id":1816},"upload-a-blob","Upload a blob",[144,1819,1820],{},"This example create an API route to upload an image of 1MB maximum to the Blob storage.",[168,1822,1825],{"className":170,"code":1823,"filename":1824,"language":172,"meta":173,"style":173},"import { ensureBlob, blob } from '@nuxthub/blob'\nimport { eventHandler, readFormData, createError } from 'h3'\n\nexport default eventHandler(async (event) => {\n  const form = await readFormData(event)\n  const file = form.get('file') as File\n\n  if (!file || !file.size) {\n    throw createError({ statusCode: 400, message: 'No file provided' })\n  }\n\n  ensureBlob(file, {\n    maxSize: '1MB',\n    types: ['image'],\n  })\n\n  return blob.put(file.name, file, {\n    addRandomSuffix: false,\n    prefix: 'images',\n  })\n})\n","server/api/files.post.ts",[158,1826,1827,1850,1877,1881,1903,1922,1953,1957,1984,2019,2023,2027,2040,2057,2079,2085,2090,2119,2132,2149,2156],{"__ignoreMap":173},[177,1828,1829,1831,1833,1836,1838,1840,1842,1844,1846,1848],{"class":179,"line":180},[177,1830,184],{"class":183},[177,1832,188],{"class":187},[177,1834,1835],{"class":191}," ensureBlob",[177,1837,566],{"class":187},[177,1839,192],{"class":191},[177,1841,195],{"class":187},[177,1843,198],{"class":183},[177,1845,201],{"class":187},[177,1847,160],{"class":204},[177,1849,207],{"class":187},[177,1851,1852,1854,1856,1858,1860,1863,1865,1867,1869,1871,1873,1875],{"class":179,"line":304},[177,1853,184],{"class":183},[177,1855,188],{"class":187},[177,1857,285],{"class":191},[177,1859,566],{"class":187},[177,1861,1862],{"class":191}," readFormData",[177,1864,566],{"class":187},[177,1866,946],{"class":191},[177,1868,195],{"class":187},[177,1870,198],{"class":183},[177,1872,201],{"class":187},[177,1874,153],{"class":204},[177,1876,207],{"class":187},[177,1878,1879],{"class":179,"line":352},[177,1880,356],{"emptyLinePlaceholder":355},[177,1882,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901],{"class":179,"line":359},[177,1884,278],{"class":183},[177,1886,281],{"class":183},[177,1888,285],{"class":284},[177,1890,288],{"class":191},[177,1892,292],{"class":291},[177,1894,984],{"class":187},[177,1896,988],{"class":987},[177,1898,991],{"class":187},[177,1900,298],{"class":291},[177,1902,301],{"class":187},[177,1904,1905,1907,1910,1912,1914,1916,1918,1920],{"class":179,"line":368},[177,1906,307],{"class":291},[177,1908,1909],{"class":191}," form",[177,1911,317],{"class":187},[177,1913,320],{"class":183},[177,1915,1862],{"class":284},[177,1917,288],{"class":331},[177,1919,988],{"class":191},[177,1921,349],{"class":331},[177,1923,1924,1926,1928,1930,1932,1934,1936,1938,1940,1943,1945,1947,1950],{"class":179,"line":524},[177,1925,307],{"class":291},[177,1927,1728],{"class":191},[177,1929,317],{"class":187},[177,1931,1909],{"class":191},[177,1933,325],{"class":187},[177,1935,1689],{"class":284},[177,1937,288],{"class":331},[177,1939,707],{"class":187},[177,1941,1942],{"class":204},"file",[177,1944,707],{"class":187},[177,1946,1036],{"class":331},[177,1948,1949],{"class":183},"as",[177,1951,1952],{"class":494}," File\n",[177,1954,1955],{"class":179,"line":538},[177,1956,356],{"emptyLinePlaceholder":355},[177,1958,1959,1961,1963,1965,1967,1970,1973,1975,1977,1980,1982],{"class":179,"line":549},[177,1960,1026],{"class":183},[177,1962,984],{"class":331},[177,1964,1031],{"class":187},[177,1966,1942],{"class":191},[177,1968,1969],{"class":187}," ||",[177,1971,1972],{"class":187}," !",[177,1974,1942],{"class":191},[177,1976,325],{"class":187},[177,1978,1979],{"class":191},"size",[177,1981,1036],{"class":331},[177,1983,474],{"class":187},[177,1985,1986,1988,1990,1992,1994,1996,1998,2001,2003,2006,2008,2010,2013,2015,2017],{"class":179,"line":574},[177,1987,1043],{"class":183},[177,1989,946],{"class":284},[177,1991,288],{"class":331},[177,1993,334],{"class":187},[177,1995,1052],{"class":331},[177,1997,340],{"class":187},[177,1999,2000],{"class":343}," 400",[177,2002,566],{"class":187},[177,2004,2005],{"class":331}," message",[177,2007,340],{"class":187},[177,2009,201],{"class":187},[177,2011,2012],{"class":204},"No file provided",[177,2014,707],{"class":187},[177,2016,195],{"class":187},[177,2018,349],{"class":331},[177,2020,2021],{"class":179,"line":594},[177,2022,1080],{"class":187},[177,2024,2025],{"class":179,"line":605},[177,2026,356],{"emptyLinePlaceholder":355},[177,2028,2029,2032,2034,2036,2038],{"class":179,"line":614},[177,2030,2031],{"class":284},"  ensureBlob",[177,2033,288],{"class":331},[177,2035,1942],{"class":191},[177,2037,566],{"class":187},[177,2039,301],{"class":187},[177,2041,2042,2045,2047,2049,2052,2054],{"class":179,"line":625},[177,2043,2044],{"class":331},"    maxSize",[177,2046,340],{"class":187},[177,2048,201],{"class":187},[177,2050,2051],{"class":204},"1MB",[177,2053,707],{"class":187},[177,2055,2056],{"class":187},",\n",[177,2058,2059,2062,2064,2067,2069,2072,2074,2077],{"class":179,"line":635},[177,2060,2061],{"class":331},"    types",[177,2063,340],{"class":187},[177,2065,2066],{"class":331}," [",[177,2068,707],{"class":187},[177,2070,2071],{"class":204},"image",[177,2073,707],{"class":187},[177,2075,2076],{"class":331},"]",[177,2078,2056],{"class":187},[177,2080,2081,2083],{"class":179,"line":647},[177,2082,608],{"class":187},[177,2084,349],{"class":331},[177,2086,2088],{"class":179,"line":2087},16,[177,2089,356],{"emptyLinePlaceholder":355},[177,2091,2093,2095,2097,2099,2102,2104,2106,2108,2111,2113,2115,2117],{"class":179,"line":2092},17,[177,2094,362],{"class":183},[177,2096,192],{"class":191},[177,2098,325],{"class":187},[177,2100,2101],{"class":284},"put",[177,2103,288],{"class":331},[177,2105,1942],{"class":191},[177,2107,325],{"class":187},[177,2109,2110],{"class":191},"name",[177,2112,566],{"class":187},[177,2114,1728],{"class":191},[177,2116,566],{"class":187},[177,2118,301],{"class":187},[177,2120,2122,2125,2127,2130],{"class":179,"line":2121},18,[177,2123,2124],{"class":331},"    addRandomSuffix",[177,2126,340],{"class":187},[177,2128,2129],{"class":763}," false",[177,2131,2056],{"class":187},[177,2133,2135,2138,2140,2142,2145,2147],{"class":179,"line":2134},19,[177,2136,2137],{"class":331},"    prefix",[177,2139,340],{"class":187},[177,2141,201],{"class":187},[177,2143,2144],{"class":204},"images",[177,2146,707],{"class":187},[177,2148,2056],{"class":187},[177,2150,2152,2154],{"class":179,"line":2151},20,[177,2153,608],{"class":187},[177,2155,349],{"class":331},[177,2157,2159,2161],{"class":179,"line":2158},21,[177,2160,371],{"class":187},[177,2162,349],{"class":191},[209,2164,2165,2166,2170],{"to":66},"For a higher-level upload API with validation and client composables, see the ",[2167,2168,2169],"strong",{},"File Uploads"," guide.",[153,2172,2173],{"id":2101},[158,2174,2175],{},"put()",[168,2177,2179],{"className":170,"code":2178,"language":172,"meta":173,"style":173},"await blob.put('images/1.jpg', file)\n\nawait blob.put(file.name, file, {\n  access: 'public',\n  addRandomSuffix: true,\n  prefix: 'images/',\n  customMetadata: {\n    userId: '123',\n    category: 'reports',\n  },\n})\n",[158,2180,2181,2205,2209,2234,2250,2261,2276,2284,2300,2316,2321],{"__ignoreMap":173},[177,2182,2183,2185,2187,2189,2191,2193,2195,2198,2200,2202],{"class":179,"line":180},[177,2184,391],{"class":183},[177,2186,192],{"class":191},[177,2188,325],{"class":187},[177,2190,2101],{"class":284},[177,2192,288],{"class":191},[177,2194,707],{"class":187},[177,2196,2197],{"class":204},"images/1.jpg",[177,2199,707],{"class":187},[177,2201,566],{"class":187},[177,2203,2204],{"class":191}," file)\n",[177,2206,2207],{"class":179,"line":304},[177,2208,356],{"emptyLinePlaceholder":355},[177,2210,2211,2213,2215,2217,2219,2222,2224,2226,2228,2230,2232],{"class":179,"line":352},[177,2212,391],{"class":183},[177,2214,192],{"class":191},[177,2216,325],{"class":187},[177,2218,2101],{"class":284},[177,2220,2221],{"class":191},"(file",[177,2223,325],{"class":187},[177,2225,2110],{"class":191},[177,2227,566],{"class":187},[177,2229,1728],{"class":191},[177,2231,566],{"class":187},[177,2233,301],{"class":187},[177,2235,2236,2239,2241,2243,2246,2248],{"class":179,"line":359},[177,2237,2238],{"class":331},"  access",[177,2240,340],{"class":187},[177,2242,201],{"class":187},[177,2244,2245],{"class":204},"public",[177,2247,707],{"class":187},[177,2249,2056],{"class":187},[177,2251,2252,2255,2257,2259],{"class":179,"line":368},[177,2253,2254],{"class":331},"  addRandomSuffix",[177,2256,340],{"class":187},[177,2258,764],{"class":763},[177,2260,2056],{"class":187},[177,2262,2263,2266,2268,2270,2272,2274],{"class":179,"line":524},[177,2264,2265],{"class":331},"  prefix",[177,2267,340],{"class":187},[177,2269,201],{"class":187},[177,2271,704],{"class":204},[177,2273,707],{"class":187},[177,2275,2056],{"class":187},[177,2277,2278,2280,2282],{"class":179,"line":538},[177,2279,1632],{"class":331},[177,2281,340],{"class":187},[177,2283,301],{"class":187},[177,2285,2286,2289,2291,2293,2296,2298],{"class":179,"line":549},[177,2287,2288],{"class":331},"    userId",[177,2290,340],{"class":187},[177,2292,201],{"class":187},[177,2294,2295],{"class":204},"123",[177,2297,707],{"class":187},[177,2299,2056],{"class":187},[177,2301,2302,2305,2307,2309,2312,2314],{"class":179,"line":574},[177,2303,2304],{"class":331},"    category",[177,2306,340],{"class":187},[177,2308,201],{"class":187},[177,2310,2311],{"class":204},"reports",[177,2313,707],{"class":187},[177,2315,2056],{"class":187},[177,2317,2318],{"class":179,"line":594},[177,2319,2320],{"class":187},"  },\n",[177,2322,2323,2325],{"class":179,"line":605},[177,2324,371],{"class":187},[177,2326,349],{"class":191},[409,2328,412],{"id":2329},"params-4",[414,2331,2332,2335,2340],{},[417,2333,2334],{"name":1017,"type":437,":required":450},"The pathname for the blob.",[417,2336,2339],{"name":2337,"type":2338,":required":450},"body","string | ReadableStream | ArrayBuffer | ArrayBufferView | Blob","The blob's data.",[417,2341,2342,2345],{"name":419,"type":420},[144,2343,2344],{},"The put options. Any other provided field will be stored in the blob's metadata.",[425,2346,2347,2352,2356,2360,2369,2372],{},[417,2348,2351],{"name":2349,"type":2350},"access","'public' | 'private'","The access level of the blob. Note that only S3 driver supports this option.",[417,2353,2355],{"name":2354,"type":437},"contentType","The content type of the blob. If not given, it will be inferred from the Blob or file extension.",[417,2357,2359],{"name":2358,"type":437},"contentLength","The content length of the blob.",[417,2361,447,2363,2365,2366,325],{"name":2362,"type":446},"addRandomSuffix",[158,2364,450],{},", a random suffix will be added to the blob's pathname. Defaults to ",[158,2367,2368],{},"false",[417,2370,2371],{"name":436,"type":563},"The prefix to use for the blob pathname.",[417,2373,2376,2377],{"name":2374,"type":2375},"customMetadata","Record\u003Cstring, string>","Custom metadata to store with the blob. ",[2378,2379,2380],"em",{},"(not supported in Vercel Blob driver)",[409,2382,459],{"id":2383},"return-4",[144,2385,462],{},[168,2387,2388],{"className":465,"code":1549,"language":467,"meta":173,"style":173},[158,2389,2390,2394,2402,2414,2422,2434,2442,2460,2478,2486],{"__ignoreMap":173},[177,2391,2392],{"class":179,"line":180},[177,2393,474],{"class":187},[177,2395,2396,2398,2400],{"class":179,"line":304},[177,2397,1560],{"class":331},[177,2399,340],{"class":187},[177,2401,495],{"class":494},[177,2403,2404,2406,2408,2410,2412],{"class":179,"line":352},[177,2405,1569],{"class":331},[177,2407,340],{"class":187},[177,2409,505],{"class":494},[177,2411,508],{"class":187},[177,2413,511],{"class":494},[177,2415,2416,2418,2420],{"class":179,"line":359},[177,2417,1582],{"class":331},[177,2419,340],{"class":187},[177,2421,521],{"class":494},[177,2423,2424,2426,2428,2430,2432],{"class":179,"line":368},[177,2425,1591],{"class":331},[177,2427,340],{"class":187},[177,2429,505],{"class":494},[177,2431,508],{"class":187},[177,2433,511],{"class":494},[177,2435,2436,2438,2440],{"class":179,"line":524},[177,2437,1604],{"class":331},[177,2439,340],{"class":187},[177,2441,546],{"class":494},[177,2443,2444,2446,2448,2450,2452,2454,2456,2458],{"class":179,"line":538},[177,2445,1613],{"class":331},[177,2447,340],{"class":187},[177,2449,557],{"class":494},[177,2451,560],{"class":187},[177,2453,563],{"class":494},[177,2455,566],{"class":187},[177,2457,505],{"class":494},[177,2459,571],{"class":187},[177,2461,2462,2464,2466,2468,2470,2472,2474,2476],{"class":179,"line":549},[177,2463,1632],{"class":331},[177,2465,340],{"class":187},[177,2467,557],{"class":494},[177,2469,560],{"class":187},[177,2471,563],{"class":494},[177,2473,566],{"class":187},[177,2475,505],{"class":494},[177,2477,571],{"class":187},[177,2479,2480,2482,2484],{"class":179,"line":574},[177,2481,1651],{"class":331},[177,2483,600],{"class":187},[177,2485,495],{"class":494},[177,2487,2488],{"class":179,"line":594},[177,2489,650],{"class":187},[409,2491,2493],{"id":2492},"upload-examples","Upload Examples",[144,2495,2496],{},[2167,2497,2498],{},"Upload from a URL:",[168,2500,2502],{"className":170,"code":2501,"language":172,"meta":173,"style":173},"const response = await fetch('https://example.com/image.png')\nconst imageBlob = await response.blob()\n\nawait blob.put('downloads/image.png', imageBlob)\n",[158,2503,2504,2529,2549,2553],{"__ignoreMap":173},[177,2505,2506,2508,2511,2513,2515,2518,2520,2522,2525,2527],{"class":179,"line":180},[177,2507,673],{"class":291},[177,2509,2510],{"class":191}," response ",[177,2512,800],{"class":187},[177,2514,320],{"class":183},[177,2516,2517],{"class":284}," fetch",[177,2519,288],{"class":191},[177,2521,707],{"class":187},[177,2523,2524],{"class":204},"https://example.com/image.png",[177,2526,707],{"class":187},[177,2528,349],{"class":191},[177,2530,2531,2533,2536,2538,2540,2543,2545,2547],{"class":179,"line":304},[177,2532,673],{"class":291},[177,2534,2535],{"class":191}," imageBlob ",[177,2537,800],{"class":187},[177,2539,320],{"class":183},[177,2541,2542],{"class":191}," response",[177,2544,325],{"class":187},[177,2546,213],{"class":284},[177,2548,1736],{"class":191},[177,2550,2551],{"class":179,"line":352},[177,2552,356],{"emptyLinePlaceholder":355},[177,2554,2555,2557,2559,2561,2563,2565,2567,2570,2572,2574],{"class":179,"line":359},[177,2556,391],{"class":183},[177,2558,192],{"class":191},[177,2560,325],{"class":187},[177,2562,2101],{"class":284},[177,2564,288],{"class":191},[177,2566,707],{"class":187},[177,2568,2569],{"class":204},"downloads/image.png",[177,2571,707],{"class":187},[177,2573,566],{"class":187},[177,2575,2576],{"class":191}," imageBlob)\n",[144,2578,2579],{},[2167,2580,2581],{},"Upload with custom metadata:",[168,2583,2585],{"className":170,"code":2584,"language":172,"meta":173,"style":173},"await blob.put('documents/report.pdf', pdfFile, {\n  customMetadata: {\n    userId: '123',\n    category: 'reports',\n  },\n})\n",[158,2586,2587,2614,2622,2636,2650,2654],{"__ignoreMap":173},[177,2588,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2610,2612],{"class":179,"line":180},[177,2590,391],{"class":183},[177,2592,192],{"class":191},[177,2594,325],{"class":187},[177,2596,2101],{"class":284},[177,2598,288],{"class":191},[177,2600,707],{"class":187},[177,2602,1696],{"class":204},[177,2604,707],{"class":187},[177,2606,566],{"class":187},[177,2608,2609],{"class":191}," pdfFile",[177,2611,566],{"class":187},[177,2613,301],{"class":187},[177,2615,2616,2618,2620],{"class":179,"line":304},[177,2617,1632],{"class":331},[177,2619,340],{"class":187},[177,2621,301],{"class":187},[177,2623,2624,2626,2628,2630,2632,2634],{"class":179,"line":352},[177,2625,2288],{"class":331},[177,2627,340],{"class":187},[177,2629,201],{"class":187},[177,2631,2295],{"class":204},[177,2633,707],{"class":187},[177,2635,2056],{"class":187},[177,2637,2638,2640,2642,2644,2646,2648],{"class":179,"line":359},[177,2639,2304],{"class":331},[177,2641,340],{"class":187},[177,2643,201],{"class":187},[177,2645,2311],{"class":204},[177,2647,707],{"class":187},[177,2649,2056],{"class":187},[177,2651,2652],{"class":179,"line":368},[177,2653,2320],{"class":187},[177,2655,2656,2658],{"class":179,"line":524},[177,2657,371],{"class":187},[177,2659,349],{"class":191},[144,2661,2662],{},[2167,2663,2664],{},"Upload to a specific folder:",[168,2666,2668],{"className":170,"code":2667,"language":172,"meta":173,"style":173},"await blob.put('avatar.png', file, {\n  prefix: `users/${userId}`,\n})\n// Stored as: users/123/avatar.png\n",[158,2669,2670,2697,2720,2726],{"__ignoreMap":173},[177,2671,2672,2674,2676,2678,2680,2682,2684,2687,2689,2691,2693,2695],{"class":179,"line":180},[177,2673,391],{"class":183},[177,2675,192],{"class":191},[177,2677,325],{"class":187},[177,2679,2101],{"class":284},[177,2681,288],{"class":191},[177,2683,707],{"class":187},[177,2685,2686],{"class":204},"avatar.png",[177,2688,707],{"class":187},[177,2690,566],{"class":187},[177,2692,1728],{"class":191},[177,2694,566],{"class":187},[177,2696,301],{"class":187},[177,2698,2699,2701,2703,2706,2709,2712,2715,2718],{"class":179,"line":304},[177,2700,2265],{"class":331},[177,2702,340],{"class":187},[177,2704,2705],{"class":187}," `",[177,2707,2708],{"class":204},"users/",[177,2710,2711],{"class":187},"${",[177,2713,2714],{"class":191},"userId",[177,2716,2717],{"class":187},"}`",[177,2719,2056],{"class":187},[177,2721,2722,2724],{"class":179,"line":352},[177,2723,371],{"class":187},[177,2725,349],{"class":191},[177,2727,2728],{"class":179,"line":359},[177,2729,2730],{"class":667},"// Stored as: users/123/avatar.png\n",[148,2732,2734],{"id":2733},"deleting-blobs","Deleting blobs",[144,2736,2737,2738,2741],{},"To delete a file, you can use the ",[158,2739,2740],{},"blob.del()"," method.",[144,2743,2744],{},"This example create an API route to delete a blob by its pathname.",[168,2746,2749],{"className":170,"code":2747,"filename":2748,"language":172,"meta":173,"style":173},"import { blob } from '@nuxthub/blob'\nimport { eventHandler, getRouterParams, sendNoContent } from 'h3'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n\n  await blob.del(pathname)\n\n  return sendNoContent(event)\n})\n","server/api/files/[...pathname].delete.ts",[158,2750,2751,2769,2796,2800,2822,2842,2846,2864,2868,2880],{"__ignoreMap":173},[177,2752,2753,2755,2757,2759,2761,2763,2765,2767],{"class":179,"line":180},[177,2754,184],{"class":183},[177,2756,188],{"class":187},[177,2758,192],{"class":191},[177,2760,195],{"class":187},[177,2762,198],{"class":183},[177,2764,201],{"class":187},[177,2766,160],{"class":204},[177,2768,207],{"class":187},[177,2770,2771,2773,2775,2777,2779,2781,2783,2786,2788,2790,2792,2794],{"class":179,"line":304},[177,2772,184],{"class":183},[177,2774,188],{"class":187},[177,2776,285],{"class":191},[177,2778,566],{"class":187},[177,2780,1220],{"class":191},[177,2782,566],{"class":187},[177,2784,2785],{"class":191}," sendNoContent",[177,2787,195],{"class":187},[177,2789,198],{"class":183},[177,2791,201],{"class":187},[177,2793,153],{"class":204},[177,2795,207],{"class":187},[177,2797,2798],{"class":179,"line":352},[177,2799,356],{"emptyLinePlaceholder":355},[177,2801,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820],{"class":179,"line":359},[177,2803,278],{"class":183},[177,2805,281],{"class":183},[177,2807,285],{"class":284},[177,2809,288],{"class":191},[177,2811,292],{"class":291},[177,2813,984],{"class":187},[177,2815,988],{"class":987},[177,2817,991],{"class":187},[177,2819,298],{"class":291},[177,2821,301],{"class":187},[177,2823,2824,2826,2828,2830,2832,2834,2836,2838,2840],{"class":179,"line":368},[177,2825,307],{"class":291},[177,2827,188],{"class":187},[177,2829,1002],{"class":191},[177,2831,195],{"class":187},[177,2833,317],{"class":187},[177,2835,1220],{"class":284},[177,2837,288],{"class":331},[177,2839,988],{"class":191},[177,2841,349],{"class":331},[177,2843,2844],{"class":179,"line":524},[177,2845,356],{"emptyLinePlaceholder":355},[177,2847,2848,2851,2853,2855,2858,2860,2862],{"class":179,"line":538},[177,2849,2850],{"class":183},"  await",[177,2852,192],{"class":191},[177,2854,325],{"class":187},[177,2856,2857],{"class":284},"del",[177,2859,288],{"class":331},[177,2861,1017],{"class":191},[177,2863,349],{"class":331},[177,2865,2866],{"class":179,"line":549},[177,2867,356],{"emptyLinePlaceholder":355},[177,2869,2870,2872,2874,2876,2878],{"class":179,"line":574},[177,2871,362],{"class":183},[177,2873,2785],{"class":284},[177,2875,288],{"class":331},[177,2877,988],{"class":191},[177,2879,349],{"class":331},[177,2881,2882,2884],{"class":179,"line":594},[177,2883,371],{"class":187},[177,2885,349],{"class":191},[153,2887,2888],{"id":2857},[158,2889,2890],{},"del()",[144,2892,2893,2894,2896],{},"The ",[158,2895,2890],{}," method deletes one or multiple blob objects from the Blob storage.",[144,2898,2899],{},"You can also delete multiple blobs at once:",[168,2901,2903],{"className":170,"code":2902,"language":172,"meta":173,"style":173},"await blob.del('images/1.jpg')\nawait blob.del(['images/1.jpg', 'images/2.jpg', 'images/3.jpg'])\n",[158,2904,2905,2925],{"__ignoreMap":173},[177,2906,2907,2909,2911,2913,2915,2917,2919,2921,2923],{"class":179,"line":180},[177,2908,391],{"class":183},[177,2910,192],{"class":191},[177,2912,325],{"class":187},[177,2914,2857],{"class":284},[177,2916,288],{"class":191},[177,2918,707],{"class":187},[177,2920,2197],{"class":204},[177,2922,707],{"class":187},[177,2924,349],{"class":191},[177,2926,2927,2929,2931,2933,2935,2938,2940,2942,2944,2946,2948,2951,2953,2955,2957,2960,2962],{"class":179,"line":304},[177,2928,391],{"class":183},[177,2930,192],{"class":191},[177,2932,325],{"class":187},[177,2934,2857],{"class":284},[177,2936,2937],{"class":191},"([",[177,2939,707],{"class":187},[177,2941,2197],{"class":204},[177,2943,707],{"class":187},[177,2945,566],{"class":187},[177,2947,201],{"class":187},[177,2949,2950],{"class":204},"images/2.jpg",[177,2952,707],{"class":187},[177,2954,566],{"class":187},[177,2956,201],{"class":187},[177,2958,2959],{"class":204},"images/3.jpg",[177,2961,707],{"class":187},[177,2963,2964],{"class":191},"])\n",[252,2966,2967,2968,2971,2972,325],{},"You can also use ",[158,2969,2970],{},"delete()"," as an alias for ",[158,2973,2890],{},[409,2975,412],{"id":2976},"params-5",[414,2978,2979],{},[417,2980,2982],{"name":1017,"type":2981,":required":450},"String | String[]","The pathname(s) of the blob(s) to delete.",[409,2984,459],{"id":2985},"return-5",[144,2987,2988],{},"Returns nothing.",[148,2990,2992],{"id":2991},"validation","Validation",[153,2994,2996],{"id":2995},"ensureblob",[158,2997,2998],{},"ensureBlob()",[144,3000,3001],{},"A server-side utility to validate a file by checking its size and type before uploading.",[168,3003,3005],{"className":170,"code":3004,"language":172,"meta":173,"style":173},"import { ensureBlob } from '@nuxthub/blob'\n\n// Will throw an error if the file is not an image or is larger than 1MB\nensureBlob(file, { maxSize: '1MB', types: ['image'] })\n",[158,3006,3007,3025,3029,3034],{"__ignoreMap":173},[177,3008,3009,3011,3013,3015,3017,3019,3021,3023],{"class":179,"line":180},[177,3010,184],{"class":183},[177,3012,188],{"class":187},[177,3014,1835],{"class":191},[177,3016,195],{"class":187},[177,3018,198],{"class":183},[177,3020,201],{"class":187},[177,3022,160],{"class":204},[177,3024,207],{"class":187},[177,3026,3027],{"class":179,"line":304},[177,3028,356],{"emptyLinePlaceholder":355},[177,3030,3031],{"class":179,"line":352},[177,3032,3033],{"class":667},"// Will throw an error if the file is not an image or is larger than 1MB\n",[177,3035,3036,3039,3041,3043,3045,3048,3050,3052,3054,3056,3058,3061,3063,3065,3067,3069,3071,3074,3076],{"class":179,"line":359},[177,3037,3038],{"class":284},"ensureBlob",[177,3040,2221],{"class":191},[177,3042,566],{"class":187},[177,3044,188],{"class":187},[177,3046,3047],{"class":331}," maxSize",[177,3049,340],{"class":187},[177,3051,201],{"class":187},[177,3053,2051],{"class":204},[177,3055,707],{"class":187},[177,3057,566],{"class":187},[177,3059,3060],{"class":331}," types",[177,3062,340],{"class":187},[177,3064,2066],{"class":191},[177,3066,707],{"class":187},[177,3068,2071],{"class":204},[177,3070,707],{"class":187},[177,3072,3073],{"class":191},"] ",[177,3075,371],{"class":187},[177,3077,349],{"class":191},[209,3079,3080,3081,3087,3088,3091],{},"This utility is automatically used by ",[1802,3082,3084],{"href":3083},"#handleupload",[158,3085,3086],{},"handleUpload()"," when you provide the ",[158,3089,3090],{},"ensure"," option.",[409,3093,412],{"id":3094},"params-6",[414,3096,3097,3100],{},[417,3098,3099],{"name":1942,"type":59,":required":450},"The file to validate.",[417,3101,3102,3112],{"name":419,"type":420,":required":450},[144,3103,3104,3105,1809,3108,3111],{},"Note that at least ",[158,3106,3107],{},"maxSize",[158,3109,3110],{},"types"," should be provided.",[425,3113,3114,3182],{},[417,3115,3117,3118,3121,3122,3125,3126,3125,3129,3125,3132,3125,3135,3125,3138,3125,3141,3125,3144,3125,3147,3125,3150,3125,3153,3156,3157,3125,3160,3125,3163,3125,3166,1036,3169,3171,3172,1307,3175,1307,3178,3181],{"name":3107,"type":3116},"BlobSize","The maximum size of the file, should be: ",[3119,3120],"br",{},"\n(",[158,3123,3124],{},"1"," | ",[158,3127,3128],{},"2",[158,3130,3131],{},"4",[158,3133,3134],{},"8",[158,3136,3137],{},"16",[158,3139,3140],{},"32",[158,3142,3143],{},"64",[158,3145,3146],{},"128",[158,3148,3149],{},"256",[158,3151,3152],{},"512",[158,3154,3155],{},"1024",") + (",[158,3158,3159],{},"B",[158,3161,3162],{},"KB",[158,3164,3165],{},"MB",[158,3167,3168],{},"GB",[3119,3170],{},"\ne.g. ",[158,3173,3174],{},"'512KB'",[158,3176,3177],{},"'1MB'",[158,3179,3180],{},"'2GB'",", etc.",[417,3183,3185,3186,1307,3189,1307,3192,1307,3195,3181],{"name":3110,"type":3184},"BlobType[]","Allowed types of the file, e.g. ",[158,3187,3188],{},"['image/jpeg']",[158,3190,3191],{},"['image']",[158,3193,3194],{},"['video']",[158,3196,3197],{},"['pdf']",[409,3199,459],{"id":3200},"return-6",[144,3202,3203],{},"Returns nothing. Throws an error if the file doesn't meet the requirements.",[3205,3206,3207],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":173,"searchDepth":304,"depth":304,"links":3209},[3210,3216,3222,3225,3228,3231,3234,3237],{"id":150,"depth":304,"text":151,"children":3211},[3212,3214],{"id":155,"depth":352,"text":3213},"Recommended: @nuxthub/blob",{"id":217,"depth":352,"text":3215},"Legacy: hub:blob",{"id":263,"depth":304,"text":264,"children":3217},[3218,3219,3220,3221],{"id":328,"depth":352,"text":378},{"id":653,"depth":352,"text":654},{"id":714,"depth":352,"text":715},{"id":780,"depth":352,"text":781},{"id":905,"depth":304,"text":906,"children":3223},[3224],{"id":1095,"depth":352,"text":1300},{"id":1371,"depth":304,"text":1372,"children":3226},[3227],{"id":1482,"depth":352,"text":1499},{"id":1662,"depth":304,"text":1663,"children":3229},[3230],{"id":1689,"depth":352,"text":1750},{"id":1816,"depth":304,"text":1817,"children":3232},[3233],{"id":2101,"depth":352,"text":2175},{"id":2733,"depth":304,"text":2734,"children":3235},[3236],{"id":2857,"depth":352,"text":2890},{"id":2991,"depth":304,"text":2992,"children":3238},[3239],{"id":2995,"depth":352,"text":2998},"Learn how to use the @nuxthub/blob SDK to list, read, store, and delete files in your Blob Storage.","md",null,{},{"title":69},{"title":139,"description":3240},"tZ7fAYlD9MDhLVK5zNd2sl3gLGHKlWwbJ90UIYe5s34",[3248,3250],{"title":65,"path":66,"stem":67,"description":3249,"children":-1},"Learn how to upload files in your Nuxt application using validation, simple uploads, and multipart uploads for large files.",{"title":40,"path":75,"stem":76,"description":3251,"children":-1},"Set up Key-Value Storage in your Nuxt application, including installation, environment configuration, and connecting to your KV database.",1774893100987]