[{"data":1,"prerenderedAt":6227},["ShallowReactive",2],{"navigation":3,"/docs/blob/upload":137,"/docs/blob/upload-surround":6222},[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":6215,"extension":6216,"links":6217,"meta":6218,"navigation":6219,"path":66,"seo":6220,"stem":67,"__hash__":6221},"docs/docs/3.blob/2.upload.md","File Uploads",{"type":141,"value":142,"toc":6192},"minimark",[143,147,152,164,175,460,466,469,493,498,559,563,582,585,590,593,867,870,900,903,914,918,1591,1595,1598,1604,1607,1610,1805,1808,1840,1843,1846,1879,1885,1888,2428,2446,2449,2499,2502,2508,2588,2605,2608,4435,4439,4442,4450,4456,4459,4628,4631,4651,4654,4663,4669,4672,4677,4863,4868,5021,5026,5183,5186,5196,5199,5206,5226,5230,5783,5787,5792,5916,5921,6065,6070,6101,6107,6188],[144,145,146],"p",{},"This page covers different methods to upload files to your Blob Storage, from simple file uploads to large file multipart uploads.",[148,149,151],"h2",{"id":150},"simple-upload","Simple Upload",[144,153,154,155,159,160,163],{},"For most use cases, you can use ",[156,157,158],"code",{},"handleUpload()"," on the server and ",[156,161,162],{},"useUpload()"," on the client for a streamlined file upload experience.",[144,165,166,167,170,171,174],{},"This example create an API route to handle file uploads on ",[156,168,169],{},"/api/upload",". It validates the files to be images of less than 10MB, and uploads them to Blob Storage with a random suffix and the ",[156,172,173],{},"images"," prefix.",[176,177,183],"pre",{"className":178,"code":179,"filename":180,"language":181,"meta":182,"style":182},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  // Make sure to check if the user can upload files before calling this function\n  return blob.handleUpload(event, {\n    formKey: 'files',\n    multiple: true,\n    ensure: {\n      maxSize: '10MB',\n      types: ['image/jpeg', 'image/png', 'image/webp'],\n    },\n    put: {\n      addRandomSuffix: true,\n      prefix: 'images',\n    },\n  })\n})\n","server/api/upload.post.ts","ts","",[156,184,185,218,225,261,268,292,312,326,336,353,394,400,410,422,438,443,452],{"__ignoreMap":182},[186,187,190,194,198,202,205,208,211,215],"span",{"class":188,"line":189},"line",1,[186,191,193],{"class":192},"s7zQu","import",[186,195,197],{"class":196},"sMK4o"," {",[186,199,201],{"class":200},"sTEyZ"," blob",[186,203,204],{"class":196}," }",[186,206,207],{"class":192}," from",[186,209,210],{"class":196}," '",[186,212,214],{"class":213},"sfazB","hub:blob",[186,216,217],{"class":196},"'\n",[186,219,221],{"class":188,"line":220},2,[186,222,224],{"emptyLinePlaceholder":223},true,"\n",[186,226,228,231,234,238,241,245,248,252,255,258],{"class":188,"line":227},3,[186,229,230],{"class":192},"export",[186,232,233],{"class":192}," default",[186,235,237],{"class":236},"s2Zo4"," eventHandler",[186,239,240],{"class":200},"(",[186,242,244],{"class":243},"spNyl","async",[186,246,247],{"class":196}," (",[186,249,251],{"class":250},"sHdIc","event",[186,253,254],{"class":196},")",[186,256,257],{"class":243}," =>",[186,259,260],{"class":196}," {\n",[186,262,264],{"class":188,"line":263},4,[186,265,267],{"class":266},"sHwdD","  // Make sure to check if the user can upload files before calling this function\n",[186,269,271,274,276,279,282,285,287,290],{"class":188,"line":270},5,[186,272,273],{"class":192},"  return",[186,275,201],{"class":200},[186,277,278],{"class":196},".",[186,280,281],{"class":236},"handleUpload",[186,283,240],{"class":284},"swJcz",[186,286,251],{"class":200},[186,288,289],{"class":196},",",[186,291,260],{"class":196},[186,293,295,298,301,303,306,309],{"class":188,"line":294},6,[186,296,297],{"class":284},"    formKey",[186,299,300],{"class":196},":",[186,302,210],{"class":196},[186,304,305],{"class":213},"files",[186,307,308],{"class":196},"'",[186,310,311],{"class":196},",\n",[186,313,315,318,320,324],{"class":188,"line":314},7,[186,316,317],{"class":284},"    multiple",[186,319,300],{"class":196},[186,321,323],{"class":322},"sfNiH"," true",[186,325,311],{"class":196},[186,327,329,332,334],{"class":188,"line":328},8,[186,330,331],{"class":284},"    ensure",[186,333,300],{"class":196},[186,335,260],{"class":196},[186,337,339,342,344,346,349,351],{"class":188,"line":338},9,[186,340,341],{"class":284},"      maxSize",[186,343,300],{"class":196},[186,345,210],{"class":196},[186,347,348],{"class":213},"10MB",[186,350,308],{"class":196},[186,352,311],{"class":196},[186,354,356,359,361,364,366,369,371,373,375,378,380,382,384,387,389,392],{"class":188,"line":355},10,[186,357,358],{"class":284},"      types",[186,360,300],{"class":196},[186,362,363],{"class":284}," [",[186,365,308],{"class":196},[186,367,368],{"class":213},"image/jpeg",[186,370,308],{"class":196},[186,372,289],{"class":196},[186,374,210],{"class":196},[186,376,377],{"class":213},"image/png",[186,379,308],{"class":196},[186,381,289],{"class":196},[186,383,210],{"class":196},[186,385,386],{"class":213},"image/webp",[186,388,308],{"class":196},[186,390,391],{"class":284},"]",[186,393,311],{"class":196},[186,395,397],{"class":188,"line":396},11,[186,398,399],{"class":196},"    },\n",[186,401,403,406,408],{"class":188,"line":402},12,[186,404,405],{"class":284},"    put",[186,407,300],{"class":196},[186,409,260],{"class":196},[186,411,413,416,418,420],{"class":188,"line":412},13,[186,414,415],{"class":284},"      addRandomSuffix",[186,417,300],{"class":196},[186,419,323],{"class":322},[186,421,311],{"class":196},[186,423,425,428,430,432,434,436],{"class":188,"line":424},14,[186,426,427],{"class":284},"      prefix",[186,429,300],{"class":196},[186,431,210],{"class":196},[186,433,173],{"class":213},[186,435,308],{"class":196},[186,437,311],{"class":196},[186,439,441],{"class":188,"line":440},15,[186,442,399],{"class":196},[186,444,446,449],{"class":188,"line":445},16,[186,447,448],{"class":196},"  }",[186,450,451],{"class":284},")\n",[186,453,455,458],{"class":188,"line":454},17,[186,456,457],{"class":196},"}",[186,459,451],{"class":200},[461,462,464],"h3",{"id":463},"handleupload",[156,465,158],{},[144,467,468],{},"A server function to handle file uploads. It validates the files and uploads them to Blob Storage.",[176,470,472],{"className":178,"code":471,"language":181,"meta":182,"style":182},"await blob.handleUpload(event, options)\n",[156,473,474],{"__ignoreMap":182},[186,475,476,479,481,483,485,488,490],{"class":188,"line":189},[186,477,478],{"class":192},"await",[186,480,201],{"class":200},[186,482,278],{"class":196},[186,484,281],{"class":236},[186,486,487],{"class":200},"(event",[186,489,289],{"class":196},[186,491,492],{"class":200}," options)\n",[494,495,497],"h4",{"id":496},"params","Params",[499,500,501,507],"field-group",{},[502,503,506],"field",{"name":251,"type":504,":required":505},"H3Event","true","The event handler's event.",[502,508,511,514],{"name":509,"type":510},"options","Object",[144,512,513],{},"The upload options.",[515,516,517,525,539,551],"collapsible",{},[502,518,521,522,278],{"name":519,"type":520},"formKey","string","The form key to read the file from. Defaults to ",[156,523,524],{},"'files'",[502,526,529,530,532,533,536,537,278],{"name":527,"type":528},"multiple","boolean","When ",[156,531,505],{},", accepts multiple files and returns an array of ",[156,534,535],{},"BlobObject",". Defaults to ",[156,538,505],{},[502,540,543,544,278],{"name":541,"type":542},"ensure","BlobEnsureOptions","Validation options passed to ",[545,546,548],"a",{"href":547},"/docs/blob/usage#ensureblob",[156,549,550],{},"ensureBlob()",[502,552,555,556,278],{"name":553,"type":554},"put","BlobPutOptions","Options passed to ",[156,557,558],{},"blob.put()",[494,560,562],{"id":561},"return","Return",[144,564,565,566,571,572,576,577,579,580,278],{},"Returns a ",[545,567,569],{"href":568},"#blobobject",[156,570,535],{}," or an array of ",[545,573,574],{"href":568},[156,575,535],{}," if ",[156,578,527],{}," is ",[156,581,505],{},[144,583,584],{},"Throws an error if the file doesn't meet the requirements.",[461,586,588],{"id":587},"useupload",[156,589,162],{},[144,591,592],{},"A Vue composable to handle file uploads on the client.",[176,594,599],{"className":595,"code":596,"filename":597,"language":598,"meta":182,"style":182},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst upload = useUpload('/api/upload')\n\nasync function onFileSelect(event: Event) {\n  const target = event.target as HTMLInputElement\n  const uploadedFiles = await upload(target)\n  // Files uploaded successfully\n  console.log('Uploaded:', uploadedFiles)\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cinput\n    accept=\"image/jpeg, image/png, image/webp\"\n    type=\"file\"\n    name=\"files\"\n    multiple\n    @change=\"onFileSelect\"\n  >\n\u003C/template>\n","pages/upload.vue","vue",[156,600,601,628,651,655,679,704,725,730,755,760,769,773,782,790,805,819,832,837,852,858],{"__ignoreMap":182},[186,602,603,606,609,612,615,618,621,623,625],{"class":188,"line":189},[186,604,605],{"class":196},"\u003C",[186,607,608],{"class":284},"script",[186,610,611],{"class":243}," setup",[186,613,614],{"class":243}," lang",[186,616,617],{"class":196},"=",[186,619,620],{"class":196},"\"",[186,622,181],{"class":213},[186,624,620],{"class":196},[186,626,627],{"class":196},">\n",[186,629,630,633,636,638,641,643,645,647,649],{"class":188,"line":220},[186,631,632],{"class":243},"const",[186,634,635],{"class":200}," upload ",[186,637,617],{"class":196},[186,639,640],{"class":236}," useUpload",[186,642,240],{"class":200},[186,644,308],{"class":196},[186,646,169],{"class":213},[186,648,308],{"class":196},[186,650,451],{"class":200},[186,652,653],{"class":188,"line":227},[186,654,224],{"emptyLinePlaceholder":223},[186,656,657,659,662,665,667,669,671,675,677],{"class":188,"line":263},[186,658,244],{"class":243},[186,660,661],{"class":243}," function",[186,663,664],{"class":236}," onFileSelect",[186,666,240],{"class":196},[186,668,251],{"class":250},[186,670,300],{"class":196},[186,672,674],{"class":673},"sBMFI"," Event",[186,676,254],{"class":196},[186,678,260],{"class":196},[186,680,681,684,687,690,693,695,698,701],{"class":188,"line":270},[186,682,683],{"class":243},"  const",[186,685,686],{"class":200}," target",[186,688,689],{"class":196}," =",[186,691,692],{"class":200}," event",[186,694,278],{"class":196},[186,696,697],{"class":200},"target",[186,699,700],{"class":192}," as",[186,702,703],{"class":673}," HTMLInputElement\n",[186,705,706,708,711,713,716,719,721,723],{"class":188,"line":294},[186,707,683],{"class":243},[186,709,710],{"class":200}," uploadedFiles",[186,712,689],{"class":196},[186,714,715],{"class":192}," await",[186,717,718],{"class":236}," upload",[186,720,240],{"class":284},[186,722,697],{"class":200},[186,724,451],{"class":284},[186,726,727],{"class":188,"line":314},[186,728,729],{"class":266},"  // Files uploaded successfully\n",[186,731,732,735,737,740,742,744,747,749,751,753],{"class":188,"line":328},[186,733,734],{"class":200},"  console",[186,736,278],{"class":196},[186,738,739],{"class":236},"log",[186,741,240],{"class":284},[186,743,308],{"class":196},[186,745,746],{"class":213},"Uploaded:",[186,748,308],{"class":196},[186,750,289],{"class":196},[186,752,710],{"class":200},[186,754,451],{"class":284},[186,756,757],{"class":188,"line":338},[186,758,759],{"class":196},"}\n",[186,761,762,765,767],{"class":188,"line":355},[186,763,764],{"class":196},"\u003C/",[186,766,608],{"class":284},[186,768,627],{"class":196},[186,770,771],{"class":188,"line":396},[186,772,224],{"emptyLinePlaceholder":223},[186,774,775,777,780],{"class":188,"line":402},[186,776,605],{"class":196},[186,778,779],{"class":284},"template",[186,781,627],{"class":196},[186,783,784,787],{"class":188,"line":412},[186,785,786],{"class":196},"  \u003C",[186,788,789],{"class":284},"input\n",[186,791,792,795,797,799,802],{"class":188,"line":424},[186,793,794],{"class":243},"    accept",[186,796,617],{"class":196},[186,798,620],{"class":196},[186,800,801],{"class":213},"image/jpeg, image/png, image/webp",[186,803,804],{"class":196},"\"\n",[186,806,807,810,812,814,817],{"class":188,"line":440},[186,808,809],{"class":243},"    type",[186,811,617],{"class":196},[186,813,620],{"class":196},[186,815,816],{"class":213},"file",[186,818,804],{"class":196},[186,820,821,824,826,828,830],{"class":188,"line":445},[186,822,823],{"class":243},"    name",[186,825,617],{"class":196},[186,827,620],{"class":196},[186,829,305],{"class":213},[186,831,804],{"class":196},[186,833,834],{"class":188,"line":454},[186,835,836],{"class":243},"    multiple\n",[186,838,840,843,845,847,850],{"class":188,"line":839},18,[186,841,842],{"class":243},"    @change",[186,844,617],{"class":196},[186,846,620],{"class":196},[186,848,849],{"class":213},"onFileSelect",[186,851,804],{"class":196},[186,853,855],{"class":188,"line":854},19,[186,856,857],{"class":196},"  >\n",[186,859,861,863,865],{"class":188,"line":860},20,[186,862,764],{"class":196},[186,864,779],{"class":284},[186,866,627],{"class":196},[494,868,497],{"id":869},"params-1",[499,871,872,876],{},[502,873,875],{"name":874,"type":520,":required":505},"apiBase","The base URL of the upload API endpoint.",[502,877,878,881],{"name":509,"type":510},[144,879,880],{},"Fetch options for the upload request.",[515,882,883,888,893],{},[502,884,885,886,278],{"name":519,"type":520},"The key to add the file(s) to the request form. Defaults to ",[156,887,524],{},[502,889,890,891,278],{"name":527,"type":528},"Whether to allow multiple files to be uploaded. Defaults to ",[156,892,505],{},[502,894,896,897,278],{"name":895,"type":520},"method","The HTTP method to use. Defaults to ",[156,898,899],{},"'POST'",[494,901,562],{"id":902},"return-1",[144,904,905,906,909,910,913],{},"Returns a function that accepts an ",[156,907,908],{},"HTMLInputElement"," and returns a ",[156,911,912],{},"Promise"," resolving to the uploaded blob data.",[461,915,917],{"id":916},"full-example","Full Example",[919,920,921,1106],"code-group",{},[176,922,924],{"className":178,"code":923,"filename":180,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  return blob.handleUpload(event, {\n    formKey: 'files',\n    multiple: true,\n    ensure: {\n      maxSize: '10MB',\n      types: ['image'],\n    },\n    put: {\n      addRandomSuffix: true,\n      prefix: 'avatars',\n    },\n  })\n})\n",[156,925,926,944,948,970,988,1002,1012,1020,1034,1053,1057,1065,1075,1090,1094,1100],{"__ignoreMap":182},[186,927,928,930,932,934,936,938,940,942],{"class":188,"line":189},[186,929,193],{"class":192},[186,931,197],{"class":196},[186,933,201],{"class":200},[186,935,204],{"class":196},[186,937,207],{"class":192},[186,939,210],{"class":196},[186,941,214],{"class":213},[186,943,217],{"class":196},[186,945,946],{"class":188,"line":220},[186,947,224],{"emptyLinePlaceholder":223},[186,949,950,952,954,956,958,960,962,964,966,968],{"class":188,"line":227},[186,951,230],{"class":192},[186,953,233],{"class":192},[186,955,237],{"class":236},[186,957,240],{"class":200},[186,959,244],{"class":243},[186,961,247],{"class":196},[186,963,251],{"class":250},[186,965,254],{"class":196},[186,967,257],{"class":243},[186,969,260],{"class":196},[186,971,972,974,976,978,980,982,984,986],{"class":188,"line":263},[186,973,273],{"class":192},[186,975,201],{"class":200},[186,977,278],{"class":196},[186,979,281],{"class":236},[186,981,240],{"class":284},[186,983,251],{"class":200},[186,985,289],{"class":196},[186,987,260],{"class":196},[186,989,990,992,994,996,998,1000],{"class":188,"line":270},[186,991,297],{"class":284},[186,993,300],{"class":196},[186,995,210],{"class":196},[186,997,305],{"class":213},[186,999,308],{"class":196},[186,1001,311],{"class":196},[186,1003,1004,1006,1008,1010],{"class":188,"line":294},[186,1005,317],{"class":284},[186,1007,300],{"class":196},[186,1009,323],{"class":322},[186,1011,311],{"class":196},[186,1013,1014,1016,1018],{"class":188,"line":314},[186,1015,331],{"class":284},[186,1017,300],{"class":196},[186,1019,260],{"class":196},[186,1021,1022,1024,1026,1028,1030,1032],{"class":188,"line":328},[186,1023,341],{"class":284},[186,1025,300],{"class":196},[186,1027,210],{"class":196},[186,1029,348],{"class":213},[186,1031,308],{"class":196},[186,1033,311],{"class":196},[186,1035,1036,1038,1040,1042,1044,1047,1049,1051],{"class":188,"line":338},[186,1037,358],{"class":284},[186,1039,300],{"class":196},[186,1041,363],{"class":284},[186,1043,308],{"class":196},[186,1045,1046],{"class":213},"image",[186,1048,308],{"class":196},[186,1050,391],{"class":284},[186,1052,311],{"class":196},[186,1054,1055],{"class":188,"line":355},[186,1056,399],{"class":196},[186,1058,1059,1061,1063],{"class":188,"line":396},[186,1060,405],{"class":284},[186,1062,300],{"class":196},[186,1064,260],{"class":196},[186,1066,1067,1069,1071,1073],{"class":188,"line":402},[186,1068,415],{"class":284},[186,1070,300],{"class":196},[186,1072,323],{"class":322},[186,1074,311],{"class":196},[186,1076,1077,1079,1081,1083,1086,1088],{"class":188,"line":412},[186,1078,427],{"class":284},[186,1080,300],{"class":196},[186,1082,210],{"class":196},[186,1084,1085],{"class":213},"avatars",[186,1087,308],{"class":196},[186,1089,311],{"class":196},[186,1091,1092],{"class":188,"line":424},[186,1093,399],{"class":196},[186,1095,1096,1098],{"class":188,"line":440},[186,1097,448],{"class":196},[186,1099,451],{"class":284},[186,1101,1102,1104],{"class":188,"line":445},[186,1103,457],{"class":196},[186,1105,451],{"class":200},[176,1107,1110],{"className":595,"code":1108,"filename":1109,"language":598,"meta":182,"style":182},"\u003Cscript setup lang=\"ts\">\nconst upload = useUpload('/api/upload')\nconst loading = ref(false)\n\nasync function onFileSelect(event: Event) {\n  const target = event.target as HTMLInputElement\n  if (!target.files?.length) return\n\n  loading.value = true\n  try {\n    const uploadedFiles = await upload(target)\n    window.alert(`Uploaded ${uploadedFiles.length} file(s)`)\n  } catch (error) {\n    window.alert(`Upload failed: ${error.message}`)\n  } finally {\n    loading.value = false\n    target.value = '' // Reset input\n  }\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cinput\n      accept=\"image/*\"\n      type=\"file\"\n      name=\"files\"\n      multiple\n      :disabled=\"loading\"\n      @change=\"onFileSelect\"\n    >\n    \u003Cp v-if=\"loading\">Uploading...\u003C/p>\n  \u003C/div>\n\u003C/template>\n","app/pages/upload.vue",[156,1111,1112,1132,1152,1171,1175,1195,1213,1241,1245,1260,1267,1286,1323,1340,1369,1378,1392,1409,1414,1418,1426,1431,1440,1450,1458,1473,1487,1501,1507,1522,1536,1542,1572,1582],{"__ignoreMap":182},[186,1113,1114,1116,1118,1120,1122,1124,1126,1128,1130],{"class":188,"line":189},[186,1115,605],{"class":196},[186,1117,608],{"class":284},[186,1119,611],{"class":243},[186,1121,614],{"class":243},[186,1123,617],{"class":196},[186,1125,620],{"class":196},[186,1127,181],{"class":213},[186,1129,620],{"class":196},[186,1131,627],{"class":196},[186,1133,1134,1136,1138,1140,1142,1144,1146,1148,1150],{"class":188,"line":220},[186,1135,632],{"class":243},[186,1137,635],{"class":200},[186,1139,617],{"class":196},[186,1141,640],{"class":236},[186,1143,240],{"class":200},[186,1145,308],{"class":196},[186,1147,169],{"class":213},[186,1149,308],{"class":196},[186,1151,451],{"class":200},[186,1153,1154,1156,1159,1161,1164,1166,1169],{"class":188,"line":227},[186,1155,632],{"class":243},[186,1157,1158],{"class":200}," loading ",[186,1160,617],{"class":196},[186,1162,1163],{"class":236}," ref",[186,1165,240],{"class":200},[186,1167,1168],{"class":322},"false",[186,1170,451],{"class":200},[186,1172,1173],{"class":188,"line":263},[186,1174,224],{"emptyLinePlaceholder":223},[186,1176,1177,1179,1181,1183,1185,1187,1189,1191,1193],{"class":188,"line":270},[186,1178,244],{"class":243},[186,1180,661],{"class":243},[186,1182,664],{"class":236},[186,1184,240],{"class":196},[186,1186,251],{"class":250},[186,1188,300],{"class":196},[186,1190,674],{"class":673},[186,1192,254],{"class":196},[186,1194,260],{"class":196},[186,1196,1197,1199,1201,1203,1205,1207,1209,1211],{"class":188,"line":294},[186,1198,683],{"class":243},[186,1200,686],{"class":200},[186,1202,689],{"class":196},[186,1204,692],{"class":200},[186,1206,278],{"class":196},[186,1208,697],{"class":200},[186,1210,700],{"class":192},[186,1212,703],{"class":673},[186,1214,1215,1218,1220,1223,1225,1227,1229,1232,1235,1238],{"class":188,"line":314},[186,1216,1217],{"class":192},"  if",[186,1219,247],{"class":284},[186,1221,1222],{"class":196},"!",[186,1224,697],{"class":200},[186,1226,278],{"class":196},[186,1228,305],{"class":200},[186,1230,1231],{"class":196},"?.",[186,1233,1234],{"class":200},"length",[186,1236,1237],{"class":284},") ",[186,1239,1240],{"class":192},"return\n",[186,1242,1243],{"class":188,"line":328},[186,1244,224],{"emptyLinePlaceholder":223},[186,1246,1247,1250,1252,1255,1257],{"class":188,"line":338},[186,1248,1249],{"class":200},"  loading",[186,1251,278],{"class":196},[186,1253,1254],{"class":200},"value",[186,1256,689],{"class":196},[186,1258,1259],{"class":322}," true\n",[186,1261,1262,1265],{"class":188,"line":355},[186,1263,1264],{"class":192},"  try",[186,1266,260],{"class":196},[186,1268,1269,1272,1274,1276,1278,1280,1282,1284],{"class":188,"line":396},[186,1270,1271],{"class":243},"    const",[186,1273,710],{"class":200},[186,1275,689],{"class":196},[186,1277,715],{"class":192},[186,1279,718],{"class":236},[186,1281,240],{"class":284},[186,1283,697],{"class":200},[186,1285,451],{"class":284},[186,1287,1288,1291,1293,1296,1298,1301,1304,1307,1310,1312,1314,1316,1319,1321],{"class":188,"line":402},[186,1289,1290],{"class":200},"    window",[186,1292,278],{"class":196},[186,1294,1295],{"class":236},"alert",[186,1297,240],{"class":284},[186,1299,1300],{"class":196},"`",[186,1302,1303],{"class":213},"Uploaded ",[186,1305,1306],{"class":196},"${",[186,1308,1309],{"class":200},"uploadedFiles",[186,1311,278],{"class":196},[186,1313,1234],{"class":200},[186,1315,457],{"class":196},[186,1317,1318],{"class":213}," file(s)",[186,1320,1300],{"class":196},[186,1322,451],{"class":284},[186,1324,1325,1327,1330,1332,1335,1337],{"class":188,"line":412},[186,1326,448],{"class":196},[186,1328,1329],{"class":192}," catch",[186,1331,247],{"class":284},[186,1333,1334],{"class":200},"error",[186,1336,1237],{"class":284},[186,1338,1339],{"class":196},"{\n",[186,1341,1342,1344,1346,1348,1350,1352,1355,1357,1359,1361,1364,1367],{"class":188,"line":424},[186,1343,1290],{"class":200},[186,1345,278],{"class":196},[186,1347,1295],{"class":236},[186,1349,240],{"class":284},[186,1351,1300],{"class":196},[186,1353,1354],{"class":213},"Upload failed: ",[186,1356,1306],{"class":196},[186,1358,1334],{"class":200},[186,1360,278],{"class":196},[186,1362,1363],{"class":200},"message",[186,1365,1366],{"class":196},"}`",[186,1368,451],{"class":284},[186,1370,1371,1373,1376],{"class":188,"line":440},[186,1372,448],{"class":196},[186,1374,1375],{"class":192}," finally",[186,1377,260],{"class":196},[186,1379,1380,1383,1385,1387,1389],{"class":188,"line":445},[186,1381,1382],{"class":200},"    loading",[186,1384,278],{"class":196},[186,1386,1254],{"class":200},[186,1388,689],{"class":196},[186,1390,1391],{"class":322}," false\n",[186,1393,1394,1397,1399,1401,1403,1406],{"class":188,"line":454},[186,1395,1396],{"class":200},"    target",[186,1398,278],{"class":196},[186,1400,1254],{"class":200},[186,1402,689],{"class":196},[186,1404,1405],{"class":196}," ''",[186,1407,1408],{"class":266}," // Reset input\n",[186,1410,1411],{"class":188,"line":839},[186,1412,1413],{"class":196},"  }\n",[186,1415,1416],{"class":188,"line":854},[186,1417,759],{"class":196},[186,1419,1420,1422,1424],{"class":188,"line":860},[186,1421,764],{"class":196},[186,1423,608],{"class":284},[186,1425,627],{"class":196},[186,1427,1429],{"class":188,"line":1428},21,[186,1430,224],{"emptyLinePlaceholder":223},[186,1432,1434,1436,1438],{"class":188,"line":1433},22,[186,1435,605],{"class":196},[186,1437,779],{"class":284},[186,1439,627],{"class":196},[186,1441,1443,1445,1448],{"class":188,"line":1442},23,[186,1444,786],{"class":196},[186,1446,1447],{"class":284},"div",[186,1449,627],{"class":196},[186,1451,1453,1456],{"class":188,"line":1452},24,[186,1454,1455],{"class":196},"    \u003C",[186,1457,789],{"class":284},[186,1459,1461,1464,1466,1468,1471],{"class":188,"line":1460},25,[186,1462,1463],{"class":243},"      accept",[186,1465,617],{"class":196},[186,1467,620],{"class":196},[186,1469,1470],{"class":213},"image/*",[186,1472,804],{"class":196},[186,1474,1476,1479,1481,1483,1485],{"class":188,"line":1475},26,[186,1477,1478],{"class":243},"      type",[186,1480,617],{"class":196},[186,1482,620],{"class":196},[186,1484,816],{"class":213},[186,1486,804],{"class":196},[186,1488,1490,1493,1495,1497,1499],{"class":188,"line":1489},27,[186,1491,1492],{"class":243},"      name",[186,1494,617],{"class":196},[186,1496,620],{"class":196},[186,1498,305],{"class":213},[186,1500,804],{"class":196},[186,1502,1504],{"class":188,"line":1503},28,[186,1505,1506],{"class":243},"      multiple\n",[186,1508,1510,1513,1515,1517,1520],{"class":188,"line":1509},29,[186,1511,1512],{"class":243},"      :disabled",[186,1514,617],{"class":196},[186,1516,620],{"class":196},[186,1518,1519],{"class":213},"loading",[186,1521,804],{"class":196},[186,1523,1525,1528,1530,1532,1534],{"class":188,"line":1524},30,[186,1526,1527],{"class":243},"      @change",[186,1529,617],{"class":196},[186,1531,620],{"class":196},[186,1533,849],{"class":213},[186,1535,804],{"class":196},[186,1537,1539],{"class":188,"line":1538},31,[186,1540,1541],{"class":196},"    >\n",[186,1543,1545,1547,1549,1552,1554,1556,1558,1560,1563,1566,1568,1570],{"class":188,"line":1544},32,[186,1546,1455],{"class":196},[186,1548,144],{"class":284},[186,1550,1551],{"class":243}," v-if",[186,1553,617],{"class":196},[186,1555,620],{"class":196},[186,1557,1519],{"class":213},[186,1559,620],{"class":196},[186,1561,1562],{"class":196},">",[186,1564,1565],{"class":200},"Uploading...",[186,1567,764],{"class":196},[186,1569,144],{"class":284},[186,1571,627],{"class":196},[186,1573,1575,1578,1580],{"class":188,"line":1574},33,[186,1576,1577],{"class":196},"  \u003C/",[186,1579,1447],{"class":284},[186,1581,627],{"class":196},[186,1583,1585,1587,1589],{"class":188,"line":1584},34,[186,1586,764],{"class":196},[186,1588,779],{"class":284},[186,1590,627],{"class":196},[148,1592,1594],{"id":1593},"multipart-upload","Multipart Upload",[144,1596,1597],{},"For large files (typically > 10MB), use multipart uploads to split the file into smaller chunks. This provides better reliability and allows you to track upload progress.",[461,1599,1601],{"id":1600},"handlemultipartupload",[156,1602,1603],{},"handleMultipartUpload()",[144,1605,1606],{},"A server function to handle multipart upload requests. It handles creating, uploading parts, completing, and aborting multipart uploads.",[144,1608,1609],{},"The route pattern depends on your blob driver:",[1611,1612,1614,1721],"tabs",{"sync":1613},"blob-provider",[1615,1616,1619,1648],"tabs-item",{"icon":1617,"label":1618},"i-lucide-hard-drive","R2/S3/FS",[144,1620,1621,1622,1625,1626,1629,1630,1633,1634,1637,1638,1637,1641,1637,1644,1647],{},"The route must include ",[156,1623,1624],{},"[action]"," and ",[156,1627,1628],{},"[...pathname]"," params. The ",[156,1631,1632],{},"action"," param handles the multipart operations (",[156,1635,1636],{},"create",", ",[156,1639,1640],{},"upload",[156,1642,1643],{},"complete",[156,1645,1646],{},"abort",").",[176,1649,1652],{"className":178,"code":1650,"filename":1651,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  return blob.handleMultipartUpload(event)\n})\n","server/api/files/multipart/[action]/[...pathname].ts",[156,1653,1654,1672,1676,1698,1715],{"__ignoreMap":182},[186,1655,1656,1658,1660,1662,1664,1666,1668,1670],{"class":188,"line":189},[186,1657,193],{"class":192},[186,1659,197],{"class":196},[186,1661,201],{"class":200},[186,1663,204],{"class":196},[186,1665,207],{"class":192},[186,1667,210],{"class":196},[186,1669,214],{"class":213},[186,1671,217],{"class":196},[186,1673,1674],{"class":188,"line":220},[186,1675,224],{"emptyLinePlaceholder":223},[186,1677,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696],{"class":188,"line":227},[186,1679,230],{"class":192},[186,1681,233],{"class":192},[186,1683,237],{"class":236},[186,1685,240],{"class":200},[186,1687,244],{"class":243},[186,1689,247],{"class":196},[186,1691,251],{"class":250},[186,1693,254],{"class":196},[186,1695,257],{"class":243},[186,1697,260],{"class":196},[186,1699,1700,1702,1704,1706,1709,1711,1713],{"class":188,"line":263},[186,1701,273],{"class":192},[186,1703,201],{"class":200},[186,1705,278],{"class":196},[186,1707,1708],{"class":236},"handleMultipartUpload",[186,1710,240],{"class":284},[186,1712,251],{"class":200},[186,1714,451],{"class":284},[186,1716,1717,1719],{"class":188,"line":270},[186,1718,457],{"class":196},[186,1720,451],{"class":200},[1615,1722,1725,1734],{"icon":1723,"label":1724},"i-simple-icons-vercel","Vercel Blob",[144,1726,1727,1728,1730,1731,1733],{},"Use ",[156,1729,1628],{}," only. Vercel Blob uses its own client SDK protocol and does not require the ",[156,1732,1624],{}," parameter.",[176,1735,1737],{"className":178,"code":1650,"filename":1736,"language":181,"meta":182,"style":182},"server/api/files/multipart/[...pathname].ts",[156,1738,1739,1757,1761,1783,1799],{"__ignoreMap":182},[186,1740,1741,1743,1745,1747,1749,1751,1753,1755],{"class":188,"line":189},[186,1742,193],{"class":192},[186,1744,197],{"class":196},[186,1746,201],{"class":200},[186,1748,204],{"class":196},[186,1750,207],{"class":192},[186,1752,210],{"class":196},[186,1754,214],{"class":213},[186,1756,217],{"class":196},[186,1758,1759],{"class":188,"line":220},[186,1760,224],{"emptyLinePlaceholder":223},[186,1762,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781],{"class":188,"line":227},[186,1764,230],{"class":192},[186,1766,233],{"class":192},[186,1768,237],{"class":236},[186,1770,240],{"class":200},[186,1772,244],{"class":243},[186,1774,247],{"class":196},[186,1776,251],{"class":250},[186,1778,254],{"class":196},[186,1780,257],{"class":243},[186,1782,260],{"class":196},[186,1784,1785,1787,1789,1791,1793,1795,1797],{"class":188,"line":263},[186,1786,273],{"class":192},[186,1788,201],{"class":200},[186,1790,278],{"class":196},[186,1792,1708],{"class":236},[186,1794,240],{"class":284},[186,1796,251],{"class":200},[186,1798,451],{"class":284},[186,1800,1801,1803],{"class":188,"line":270},[186,1802,457],{"class":196},[186,1804,451],{"class":200},[494,1806,497],{"id":1807},"params-2",[499,1809,1810,1812],{},[502,1811,506],{"name":251,"type":504,":required":505},[502,1813,1814,1817],{"name":509,"type":510},[144,1815,1816],{},"The multipart upload options.",[515,1818,1819,1823,1827,1836],{},[502,1820,1822],{"name":1821,"type":520},"contentType","The content type of the blob.",[502,1824,1826],{"name":1825,"type":520},"contentLength","The content length of the blob.",[502,1828,1830,1831,1833,1834,278],{"name":1829,"type":528},"addRandomSuffix","If ",[156,1832,505],{},", a random suffix will be added to the blob's name. Defaults to ",[156,1835,1168],{},[502,1837,1839],{"name":1838,"type":520},"prefix","The prefix to use for the blob pathname.",[494,1841,562],{"id":1842},"return-2",[144,1844,1845],{},"Returns a response based on the action:",[1847,1848,1849,1858,1865,1874],"ul",{},[1850,1851,1852,1854,1855],"li",{},[156,1853,1636],{},": Returns ",[156,1856,1857],{},"{ pathname, uploadId }",[1850,1859,1860,1854,1862],{},[156,1861,1640],{},[156,1863,1864],{},"{ partNumber, etag }",[1850,1866,1867,1869,1870],{},[156,1868,1643],{},": Returns a ",[545,1871,1872],{"href":568},[156,1873,535],{},[1850,1875,1876,1878],{},[156,1877,1646],{},": Returns nothing",[461,1880,1882],{"id":1881},"usemultipartupload",[156,1883,1884],{},"useMultipartUpload()",[144,1886,1887],{},"A Vue composable to handle multipart file uploads on the client with progress tracking.",[176,1889,1892],{"className":595,"code":1890,"filename":1891,"language":598,"meta":182,"style":182},"\u003Cscript setup lang=\"ts\">\nconst mpu = useMultipartUpload('/api/files/multipart')\n\nconst file = ref\u003CFile | null>(null)\nconst progress = ref(0)\nconst uploading = ref(false)\n\nasync function uploadFile() {\n  if (!file.value) return\n\n  uploading.value = true\n  const { completed, progress: uploadProgress, abort } = mpu(file.value)\n\n  // Track progress\n  watch(uploadProgress, (value) => {\n    progress.value = value\n  })\n\n  try {\n    const blob = await completed\n    console.log('Upload complete:', blob)\n  } catch (error) {\n    console.error('Upload failed:', error)\n  } finally {\n    uploading.value = false\n  }\n}\n\u003C/script>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    \u003Cinput type=\"file\" @change=\"(e) => file = e.target.files?.[0]\">\n    \u003Cbutton @click=\"uploadFile\" :disabled=\"!file || uploading\">\n      Upload\n    \u003C/button>\n    \u003Cdiv v-if=\"uploading\">\n      Progress: {{ Math.round(progress * 100) }}%\n    \u003C/div>\n  \u003C/div>\n\u003C/template>\n","pages/upload-large.vue",[156,1893,1894,1914,1937,1941,1972,1991,2008,2012,2026,2044,2048,2061,2102,2106,2111,2133,2147,2153,2157,2163,2176,2200,2214,2238,2246,2259,2263,2267,2275,2279,2287,2295,2327,2360,2365,2375,2395,2401,2410,2419],{"__ignoreMap":182},[186,1895,1896,1898,1900,1902,1904,1906,1908,1910,1912],{"class":188,"line":189},[186,1897,605],{"class":196},[186,1899,608],{"class":284},[186,1901,611],{"class":243},[186,1903,614],{"class":243},[186,1905,617],{"class":196},[186,1907,620],{"class":196},[186,1909,181],{"class":213},[186,1911,620],{"class":196},[186,1913,627],{"class":196},[186,1915,1916,1918,1921,1923,1926,1928,1930,1933,1935],{"class":188,"line":220},[186,1917,632],{"class":243},[186,1919,1920],{"class":200}," mpu ",[186,1922,617],{"class":196},[186,1924,1925],{"class":236}," useMultipartUpload",[186,1927,240],{"class":200},[186,1929,308],{"class":196},[186,1931,1932],{"class":213},"/api/files/multipart",[186,1934,308],{"class":196},[186,1936,451],{"class":200},[186,1938,1939],{"class":188,"line":227},[186,1940,224],{"emptyLinePlaceholder":223},[186,1942,1943,1945,1948,1950,1952,1954,1957,1960,1963,1965,1967,1970],{"class":188,"line":263},[186,1944,632],{"class":243},[186,1946,1947],{"class":200}," file ",[186,1949,617],{"class":196},[186,1951,1163],{"class":236},[186,1953,605],{"class":196},[186,1955,1956],{"class":673},"File",[186,1958,1959],{"class":196}," |",[186,1961,1962],{"class":673}," null",[186,1964,1562],{"class":196},[186,1966,240],{"class":200},[186,1968,1969],{"class":196},"null",[186,1971,451],{"class":200},[186,1973,1974,1976,1979,1981,1983,1985,1989],{"class":188,"line":270},[186,1975,632],{"class":243},[186,1977,1978],{"class":200}," progress ",[186,1980,617],{"class":196},[186,1982,1163],{"class":236},[186,1984,240],{"class":200},[186,1986,1988],{"class":1987},"sbssI","0",[186,1990,451],{"class":200},[186,1992,1993,1995,1998,2000,2002,2004,2006],{"class":188,"line":294},[186,1994,632],{"class":243},[186,1996,1997],{"class":200}," uploading ",[186,1999,617],{"class":196},[186,2001,1163],{"class":236},[186,2003,240],{"class":200},[186,2005,1168],{"class":322},[186,2007,451],{"class":200},[186,2009,2010],{"class":188,"line":314},[186,2011,224],{"emptyLinePlaceholder":223},[186,2013,2014,2016,2018,2021,2024],{"class":188,"line":328},[186,2015,244],{"class":243},[186,2017,661],{"class":243},[186,2019,2020],{"class":236}," uploadFile",[186,2022,2023],{"class":196},"()",[186,2025,260],{"class":196},[186,2027,2028,2030,2032,2034,2036,2038,2040,2042],{"class":188,"line":338},[186,2029,1217],{"class":192},[186,2031,247],{"class":284},[186,2033,1222],{"class":196},[186,2035,816],{"class":200},[186,2037,278],{"class":196},[186,2039,1254],{"class":200},[186,2041,1237],{"class":284},[186,2043,1240],{"class":192},[186,2045,2046],{"class":188,"line":355},[186,2047,224],{"emptyLinePlaceholder":223},[186,2049,2050,2053,2055,2057,2059],{"class":188,"line":396},[186,2051,2052],{"class":200},"  uploading",[186,2054,278],{"class":196},[186,2056,1254],{"class":200},[186,2058,689],{"class":196},[186,2060,1259],{"class":322},[186,2062,2063,2065,2067,2070,2072,2075,2077,2080,2082,2085,2087,2089,2092,2094,2096,2098,2100],{"class":188,"line":402},[186,2064,683],{"class":243},[186,2066,197],{"class":196},[186,2068,2069],{"class":200}," completed",[186,2071,289],{"class":196},[186,2073,2074],{"class":284}," progress",[186,2076,300],{"class":196},[186,2078,2079],{"class":200}," uploadProgress",[186,2081,289],{"class":196},[186,2083,2084],{"class":200}," abort",[186,2086,204],{"class":196},[186,2088,689],{"class":196},[186,2090,2091],{"class":236}," mpu",[186,2093,240],{"class":284},[186,2095,816],{"class":200},[186,2097,278],{"class":196},[186,2099,1254],{"class":200},[186,2101,451],{"class":284},[186,2103,2104],{"class":188,"line":412},[186,2105,224],{"emptyLinePlaceholder":223},[186,2107,2108],{"class":188,"line":424},[186,2109,2110],{"class":266},"  // Track progress\n",[186,2112,2113,2116,2118,2121,2123,2125,2127,2129,2131],{"class":188,"line":440},[186,2114,2115],{"class":236},"  watch",[186,2117,240],{"class":284},[186,2119,2120],{"class":200},"uploadProgress",[186,2122,289],{"class":196},[186,2124,247],{"class":196},[186,2126,1254],{"class":250},[186,2128,254],{"class":196},[186,2130,257],{"class":243},[186,2132,260],{"class":196},[186,2134,2135,2138,2140,2142,2144],{"class":188,"line":445},[186,2136,2137],{"class":200},"    progress",[186,2139,278],{"class":196},[186,2141,1254],{"class":200},[186,2143,689],{"class":196},[186,2145,2146],{"class":200}," value\n",[186,2148,2149,2151],{"class":188,"line":454},[186,2150,448],{"class":196},[186,2152,451],{"class":284},[186,2154,2155],{"class":188,"line":839},[186,2156,224],{"emptyLinePlaceholder":223},[186,2158,2159,2161],{"class":188,"line":854},[186,2160,1264],{"class":192},[186,2162,260],{"class":196},[186,2164,2165,2167,2169,2171,2173],{"class":188,"line":860},[186,2166,1271],{"class":243},[186,2168,201],{"class":200},[186,2170,689],{"class":196},[186,2172,715],{"class":192},[186,2174,2175],{"class":200}," completed\n",[186,2177,2178,2181,2183,2185,2187,2189,2192,2194,2196,2198],{"class":188,"line":1428},[186,2179,2180],{"class":200},"    console",[186,2182,278],{"class":196},[186,2184,739],{"class":236},[186,2186,240],{"class":284},[186,2188,308],{"class":196},[186,2190,2191],{"class":213},"Upload complete:",[186,2193,308],{"class":196},[186,2195,289],{"class":196},[186,2197,201],{"class":200},[186,2199,451],{"class":284},[186,2201,2202,2204,2206,2208,2210,2212],{"class":188,"line":1433},[186,2203,448],{"class":196},[186,2205,1329],{"class":192},[186,2207,247],{"class":284},[186,2209,1334],{"class":200},[186,2211,1237],{"class":284},[186,2213,1339],{"class":196},[186,2215,2216,2218,2220,2222,2224,2226,2229,2231,2233,2236],{"class":188,"line":1442},[186,2217,2180],{"class":200},[186,2219,278],{"class":196},[186,2221,1334],{"class":236},[186,2223,240],{"class":284},[186,2225,308],{"class":196},[186,2227,2228],{"class":213},"Upload failed:",[186,2230,308],{"class":196},[186,2232,289],{"class":196},[186,2234,2235],{"class":200}," error",[186,2237,451],{"class":284},[186,2239,2240,2242,2244],{"class":188,"line":1452},[186,2241,448],{"class":196},[186,2243,1375],{"class":192},[186,2245,260],{"class":196},[186,2247,2248,2251,2253,2255,2257],{"class":188,"line":1460},[186,2249,2250],{"class":200},"    uploading",[186,2252,278],{"class":196},[186,2254,1254],{"class":200},[186,2256,689],{"class":196},[186,2258,1391],{"class":322},[186,2260,2261],{"class":188,"line":1475},[186,2262,1413],{"class":196},[186,2264,2265],{"class":188,"line":1489},[186,2266,759],{"class":196},[186,2268,2269,2271,2273],{"class":188,"line":1503},[186,2270,764],{"class":196},[186,2272,608],{"class":284},[186,2274,627],{"class":196},[186,2276,2277],{"class":188,"line":1509},[186,2278,224],{"emptyLinePlaceholder":223},[186,2280,2281,2283,2285],{"class":188,"line":1524},[186,2282,605],{"class":196},[186,2284,779],{"class":284},[186,2286,627],{"class":196},[186,2288,2289,2291,2293],{"class":188,"line":1538},[186,2290,786],{"class":196},[186,2292,1447],{"class":284},[186,2294,627],{"class":196},[186,2296,2297,2299,2302,2305,2307,2309,2311,2313,2316,2318,2320,2323,2325],{"class":188,"line":1544},[186,2298,1455],{"class":196},[186,2300,2301],{"class":284},"input",[186,2303,2304],{"class":243}," type",[186,2306,617],{"class":196},[186,2308,620],{"class":196},[186,2310,816],{"class":213},[186,2312,620],{"class":196},[186,2314,2315],{"class":243}," @change",[186,2317,617],{"class":196},[186,2319,620],{"class":196},[186,2321,2322],{"class":213},"(e) => file = e.target.files?.[0]",[186,2324,620],{"class":196},[186,2326,627],{"class":196},[186,2328,2329,2331,2334,2337,2339,2341,2344,2346,2349,2351,2353,2356,2358],{"class":188,"line":1574},[186,2330,1455],{"class":196},[186,2332,2333],{"class":284},"button",[186,2335,2336],{"class":243}," @click",[186,2338,617],{"class":196},[186,2340,620],{"class":196},[186,2342,2343],{"class":213},"uploadFile",[186,2345,620],{"class":196},[186,2347,2348],{"class":243}," :disabled",[186,2350,617],{"class":196},[186,2352,620],{"class":196},[186,2354,2355],{"class":213},"!file || uploading",[186,2357,620],{"class":196},[186,2359,627],{"class":196},[186,2361,2362],{"class":188,"line":1584},[186,2363,2364],{"class":200},"      Upload\n",[186,2366,2368,2371,2373],{"class":188,"line":2367},35,[186,2369,2370],{"class":196},"    \u003C/",[186,2372,2333],{"class":284},[186,2374,627],{"class":196},[186,2376,2378,2380,2382,2384,2386,2388,2391,2393],{"class":188,"line":2377},36,[186,2379,1455],{"class":196},[186,2381,1447],{"class":284},[186,2383,1551],{"class":243},[186,2385,617],{"class":196},[186,2387,620],{"class":196},[186,2389,2390],{"class":213},"uploading",[186,2392,620],{"class":196},[186,2394,627],{"class":196},[186,2396,2398],{"class":188,"line":2397},37,[186,2399,2400],{"class":200},"      Progress: {{ Math.round(progress * 100) }}%\n",[186,2402,2404,2406,2408],{"class":188,"line":2403},38,[186,2405,2370],{"class":196},[186,2407,1447],{"class":284},[186,2409,627],{"class":196},[186,2411,2413,2415,2417],{"class":188,"line":2412},39,[186,2414,1577],{"class":196},[186,2416,1447],{"class":284},[186,2418,627],{"class":196},[186,2420,2422,2424,2426],{"class":188,"line":2421},40,[186,2423,764],{"class":196},[186,2425,779],{"class":284},[186,2427,627],{"class":196},[2429,2430,2431,2432,1637,2436,1637,2439,2441,2442,2445],"important",{},"Multipart uploads are supported on ",[2433,2434,2435],"strong",{},"Cloudflare R2",[2433,2437,2438],{},"S3",[2433,2440,1724],{},", and ",[2433,2443,2444],{},"filesystem"," drivers.",[494,2447,497],{"id":2448},"params-3",[499,2450,2451,2457],{},[502,2452,2454,2455,278],{"name":2453,"type":520,":required":505},"baseURL","The base URL of the multipart upload API handled by ",[156,2456,1603],{},[502,2458,2459,2462],{"name":509,"type":510},[144,2460,2461],{},"The options for the multipart upload helper.",[515,2463,2464,2471,2478,2485,2487],{},[502,2465,2468,2469,278],{"name":2466,"type":2467},"partSize","number","The size of each part. Defaults to ",[156,2470,348],{},[502,2472,2474,2475,278],{"name":2473,"type":2467},"concurrent","The maximum number of concurrent part uploads. Defaults to ",[156,2476,2477],{},"1",[502,2479,2481,2482,278],{"name":2480,"type":2467},"maxRetry","The maximum number of retry attempts. Defaults to ",[156,2483,2484],{},"3",[502,2486,1839],{"name":1838,"type":520},[502,2488,2491,2492,1625,2495,2498],{"name":2489,"type":2490},"fetchOptions","FetchOptions","Override the fetch options. The ",[156,2493,2494],{},"query",[156,2496,2497],{},"headers"," will be merged.",[494,2500,562],{"id":2501},"return-3",[144,2503,2504,2505,2507],{},"Returns a function that accepts a ",[156,2506,1956],{}," and returns:",[176,2509,2511],{"className":178,"code":2510,"language":181,"meta":182,"style":182},"{\n  completed: Promise\u003CBlobObject | undefined>  // Resolves when upload completes\n  progress: Readonly\u003CRef\u003Cnumber>>             // Upload progress (0 to 1)\n  abort: () => Promise\u003Cvoid>                  // Function to cancel the upload\n}\n",[156,2512,2513,2517,2539,2564,2584],{"__ignoreMap":182},[186,2514,2515],{"class":188,"line":189},[186,2516,1339],{"class":196},[186,2518,2519,2522,2524,2527,2529,2531,2533,2536],{"class":188,"line":220},[186,2520,2521],{"class":673},"  completed",[186,2523,300],{"class":196},[186,2525,2526],{"class":673}," Promise",[186,2528,605],{"class":196},[186,2530,535],{"class":200},[186,2532,1959],{"class":196},[186,2534,2535],{"class":196}," undefined>",[186,2537,2538],{"class":266},"  // Resolves when upload completes\n",[186,2540,2541,2544,2546,2549,2551,2554,2556,2558,2561],{"class":188,"line":227},[186,2542,2543],{"class":673},"  progress",[186,2545,300],{"class":196},[186,2547,2548],{"class":200}," Readonly",[186,2550,605],{"class":196},[186,2552,2553],{"class":200},"Ref",[186,2555,605],{"class":196},[186,2557,2467],{"class":200},[186,2559,2560],{"class":196},">>",[186,2562,2563],{"class":266},"             // Upload progress (0 to 1)\n",[186,2565,2566,2569,2571,2574,2576,2578,2581],{"class":188,"line":263},[186,2567,2568],{"class":673},"  abort",[186,2570,300],{"class":196},[186,2572,2573],{"class":196}," ()",[186,2575,257],{"class":243},[186,2577,2526],{"class":673},[186,2579,2580],{"class":196},"\u003Cvoid>",[186,2582,2583],{"class":266},"                  // Function to cancel the upload\n",[186,2585,2586],{"class":188,"line":270},[186,2587,759],{"class":196},[2589,2590,2591,2592,2594,2595,2597,2598,2604],"note",{},"When using the ",[2433,2593,1724],{}," driver, ",[156,2596,1884],{}," automatically uses the ",[545,2599,2603],{"href":2600,"rel":2601},"https://vercel.com/docs/vercel-blob/client-upload",[2602],"nofollow","Vercel Blob Client SDK"," for uploads.",[461,2606,917],{"id":2607},"full-example-1",[1611,2609,2610,3557],{"sync":1613},[1615,2611,2612],{"icon":1617,"label":1618},[919,2613,2614,2720],{},[176,2615,2617],{"className":178,"code":2616,"filename":1651,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  return blob.handleMultipartUpload(event, {\n    addRandomSuffix: true,\n    prefix: 'uploads',\n  })\n})\n",[156,2618,2619,2637,2641,2663,2681,2692,2708,2714],{"__ignoreMap":182},[186,2620,2621,2623,2625,2627,2629,2631,2633,2635],{"class":188,"line":189},[186,2622,193],{"class":192},[186,2624,197],{"class":196},[186,2626,201],{"class":200},[186,2628,204],{"class":196},[186,2630,207],{"class":192},[186,2632,210],{"class":196},[186,2634,214],{"class":213},[186,2636,217],{"class":196},[186,2638,2639],{"class":188,"line":220},[186,2640,224],{"emptyLinePlaceholder":223},[186,2642,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661],{"class":188,"line":227},[186,2644,230],{"class":192},[186,2646,233],{"class":192},[186,2648,237],{"class":236},[186,2650,240],{"class":200},[186,2652,244],{"class":243},[186,2654,247],{"class":196},[186,2656,251],{"class":250},[186,2658,254],{"class":196},[186,2660,257],{"class":243},[186,2662,260],{"class":196},[186,2664,2665,2667,2669,2671,2673,2675,2677,2679],{"class":188,"line":263},[186,2666,273],{"class":192},[186,2668,201],{"class":200},[186,2670,278],{"class":196},[186,2672,1708],{"class":236},[186,2674,240],{"class":284},[186,2676,251],{"class":200},[186,2678,289],{"class":196},[186,2680,260],{"class":196},[186,2682,2683,2686,2688,2690],{"class":188,"line":270},[186,2684,2685],{"class":284},"    addRandomSuffix",[186,2687,300],{"class":196},[186,2689,323],{"class":322},[186,2691,311],{"class":196},[186,2693,2694,2697,2699,2701,2704,2706],{"class":188,"line":294},[186,2695,2696],{"class":284},"    prefix",[186,2698,300],{"class":196},[186,2700,210],{"class":196},[186,2702,2703],{"class":213},"uploads",[186,2705,308],{"class":196},[186,2707,311],{"class":196},[186,2709,2710,2712],{"class":188,"line":314},[186,2711,448],{"class":196},[186,2713,451],{"class":284},[186,2715,2716,2718],{"class":188,"line":328},[186,2717,457],{"class":196},[186,2719,451],{"class":200},[176,2721,2723],{"className":595,"code":2722,"filename":1891,"language":598,"meta":182,"style":182},"\u003Cscript setup lang=\"ts\">\nconst mpu = useMultipartUpload('/api/files/multipart', {\npartSize: 10 * 1024 * 1024, // 10MB parts\nconcurrent: 3, // Upload 3 parts at a time\n})\n\nconst file = ref\u003CFile | null>(null)\nconst progress = ref(0)\nconst uploading = ref(false)\nlet abortUpload: (() => Promise\u003Cvoid>) | null = null\n\nasync function startUpload() {\nif (!file.value) return\n\nuploading.value = true\nprogress.value = 0\n\nconst { completed, progress: uploadProgress, abort } = mpu(file.value)\nabortUpload = abort\n\nwatch(uploadProgress, (value) => {\n  progress.value = value\n})\n\ntry {\n  const blob = await completed\n  console.log('Uploaded:', blob)\n} catch (error) {\n  if (error.name !== 'AbortError') {\n    console.error('Upload failed:', error)\n  }\n} finally {\n  uploading.value = false\n  abortUpload = null\n}\n}\n\nasync function cancelUpload() {\nif (abortUpload) {\n  await abortUpload()\n  uploading.value = false\n}\n}\n\u003C/script>\n\n\u003Ctemplate>\n\u003Cdiv>\n  \u003Cinput\n    type=\"file\"\n    :disabled=\"uploading\"\n    @change=\"(e) => file = e.target.files?.[0]\"\n  >\n  \u003Cbutton v-if=\"!uploading\" @click=\"startUpload\" :disabled=\"!file\">\n    Upload\n  \u003C/button>\n  \u003Cbutton v-else @click=\"cancelUpload\">\n    Cancel\n  \u003C/button>\n  \u003Cdiv v-if=\"uploading\" class=\"progress-bar\">\n    \u003Cdiv :style=\"{ width: `${progress * 100}%` }\" />\n    \u003Cspan>{{ Math.round(progress * 100) }}%\u003C/span>\n  \u003C/div>\n\u003C/div>\n\u003C/template>\n",[156,2724,2725,2745,2767,2791,2805,2811,2815,2841,2857,2873,2910,2914,2927,2946,2950,2962,2976,2980,3016,3026,3030,3051,3063,3069,3073,3080,3092,3114,3128,3155,3177,3181,3189,3201,3210,3214,3218,3222,3235,3247,3257,3270,3275,3280,3289,3294,3303,3312,3319,3332,3346,3359,3364,3406,3412,3421,3444,3450,3459,3490,3512,3530,3539,3548],{"__ignoreMap":182},[186,2726,2727,2729,2731,2733,2735,2737,2739,2741,2743],{"class":188,"line":189},[186,2728,605],{"class":196},[186,2730,608],{"class":284},[186,2732,611],{"class":243},[186,2734,614],{"class":243},[186,2736,617],{"class":196},[186,2738,620],{"class":196},[186,2740,181],{"class":213},[186,2742,620],{"class":196},[186,2744,627],{"class":196},[186,2746,2747,2749,2751,2753,2755,2757,2759,2761,2763,2765],{"class":188,"line":220},[186,2748,632],{"class":243},[186,2750,1920],{"class":200},[186,2752,617],{"class":196},[186,2754,1925],{"class":236},[186,2756,240],{"class":200},[186,2758,308],{"class":196},[186,2760,1932],{"class":213},[186,2762,308],{"class":196},[186,2764,289],{"class":196},[186,2766,260],{"class":196},[186,2768,2769,2771,2773,2776,2779,2782,2784,2786,2788],{"class":188,"line":227},[186,2770,2466],{"class":284},[186,2772,300],{"class":196},[186,2774,2775],{"class":1987}," 10",[186,2777,2778],{"class":196}," *",[186,2780,2781],{"class":1987}," 1024",[186,2783,2778],{"class":196},[186,2785,2781],{"class":1987},[186,2787,289],{"class":196},[186,2789,2790],{"class":266}," // 10MB parts\n",[186,2792,2793,2795,2797,2800,2802],{"class":188,"line":263},[186,2794,2473],{"class":284},[186,2796,300],{"class":196},[186,2798,2799],{"class":1987}," 3",[186,2801,289],{"class":196},[186,2803,2804],{"class":266}," // Upload 3 parts at a time\n",[186,2806,2807,2809],{"class":188,"line":270},[186,2808,457],{"class":196},[186,2810,451],{"class":200},[186,2812,2813],{"class":188,"line":294},[186,2814,224],{"emptyLinePlaceholder":223},[186,2816,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839],{"class":188,"line":314},[186,2818,632],{"class":243},[186,2820,1947],{"class":200},[186,2822,617],{"class":196},[186,2824,1163],{"class":236},[186,2826,605],{"class":196},[186,2828,1956],{"class":673},[186,2830,1959],{"class":196},[186,2832,1962],{"class":673},[186,2834,1562],{"class":196},[186,2836,240],{"class":200},[186,2838,1969],{"class":196},[186,2840,451],{"class":200},[186,2842,2843,2845,2847,2849,2851,2853,2855],{"class":188,"line":328},[186,2844,632],{"class":243},[186,2846,1978],{"class":200},[186,2848,617],{"class":196},[186,2850,1163],{"class":236},[186,2852,240],{"class":200},[186,2854,1988],{"class":1987},[186,2856,451],{"class":200},[186,2858,2859,2861,2863,2865,2867,2869,2871],{"class":188,"line":338},[186,2860,632],{"class":243},[186,2862,1997],{"class":200},[186,2864,617],{"class":196},[186,2866,1163],{"class":236},[186,2868,240],{"class":200},[186,2870,1168],{"class":322},[186,2872,451],{"class":200},[186,2874,2875,2878,2881,2883,2885,2887,2889,2891,2893,2896,2898,2900,2903,2905,2907],{"class":188,"line":355},[186,2876,2877],{"class":243},"let",[186,2879,2880],{"class":200}," abortUpload",[186,2882,300],{"class":196},[186,2884,247],{"class":200},[186,2886,2023],{"class":196},[186,2888,257],{"class":243},[186,2890,2526],{"class":673},[186,2892,605],{"class":196},[186,2894,2895],{"class":673},"void",[186,2897,1562],{"class":196},[186,2899,1237],{"class":200},[186,2901,2902],{"class":196},"|",[186,2904,1962],{"class":673},[186,2906,689],{"class":196},[186,2908,2909],{"class":196}," null\n",[186,2911,2912],{"class":188,"line":396},[186,2913,224],{"emptyLinePlaceholder":223},[186,2915,2916,2918,2920,2923,2925],{"class":188,"line":402},[186,2917,244],{"class":243},[186,2919,661],{"class":243},[186,2921,2922],{"class":236}," startUpload",[186,2924,2023],{"class":196},[186,2926,260],{"class":196},[186,2928,2929,2932,2934,2936,2938,2940,2942,2944],{"class":188,"line":412},[186,2930,2931],{"class":192},"if",[186,2933,247],{"class":284},[186,2935,1222],{"class":196},[186,2937,816],{"class":200},[186,2939,278],{"class":196},[186,2941,1254],{"class":200},[186,2943,1237],{"class":284},[186,2945,1240],{"class":192},[186,2947,2948],{"class":188,"line":424},[186,2949,224],{"emptyLinePlaceholder":223},[186,2951,2952,2954,2956,2958,2960],{"class":188,"line":440},[186,2953,2390],{"class":200},[186,2955,278],{"class":196},[186,2957,1254],{"class":200},[186,2959,689],{"class":196},[186,2961,1259],{"class":322},[186,2963,2964,2967,2969,2971,2973],{"class":188,"line":445},[186,2965,2966],{"class":200},"progress",[186,2968,278],{"class":196},[186,2970,1254],{"class":200},[186,2972,689],{"class":196},[186,2974,2975],{"class":1987}," 0\n",[186,2977,2978],{"class":188,"line":454},[186,2979,224],{"emptyLinePlaceholder":223},[186,2981,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014],{"class":188,"line":839},[186,2983,632],{"class":243},[186,2985,197],{"class":196},[186,2987,2069],{"class":200},[186,2989,289],{"class":196},[186,2991,2074],{"class":284},[186,2993,300],{"class":196},[186,2995,2079],{"class":200},[186,2997,289],{"class":196},[186,2999,2084],{"class":200},[186,3001,204],{"class":196},[186,3003,689],{"class":196},[186,3005,2091],{"class":236},[186,3007,240],{"class":284},[186,3009,816],{"class":200},[186,3011,278],{"class":196},[186,3013,1254],{"class":200},[186,3015,451],{"class":284},[186,3017,3018,3021,3023],{"class":188,"line":854},[186,3019,3020],{"class":200},"abortUpload",[186,3022,689],{"class":196},[186,3024,3025],{"class":200}," abort\n",[186,3027,3028],{"class":188,"line":860},[186,3029,224],{"emptyLinePlaceholder":223},[186,3031,3032,3035,3037,3039,3041,3043,3045,3047,3049],{"class":188,"line":1428},[186,3033,3034],{"class":236},"watch",[186,3036,240],{"class":284},[186,3038,2120],{"class":200},[186,3040,289],{"class":196},[186,3042,247],{"class":196},[186,3044,1254],{"class":250},[186,3046,254],{"class":196},[186,3048,257],{"class":243},[186,3050,260],{"class":196},[186,3052,3053,3055,3057,3059,3061],{"class":188,"line":1433},[186,3054,2543],{"class":200},[186,3056,278],{"class":196},[186,3058,1254],{"class":200},[186,3060,689],{"class":196},[186,3062,2146],{"class":200},[186,3064,3065,3067],{"class":188,"line":1442},[186,3066,457],{"class":196},[186,3068,451],{"class":284},[186,3070,3071],{"class":188,"line":1452},[186,3072,224],{"emptyLinePlaceholder":223},[186,3074,3075,3078],{"class":188,"line":1460},[186,3076,3077],{"class":192},"try",[186,3079,260],{"class":196},[186,3081,3082,3084,3086,3088,3090],{"class":188,"line":1475},[186,3083,683],{"class":243},[186,3085,201],{"class":200},[186,3087,689],{"class":196},[186,3089,715],{"class":192},[186,3091,2175],{"class":200},[186,3093,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112],{"class":188,"line":1489},[186,3095,734],{"class":200},[186,3097,278],{"class":196},[186,3099,739],{"class":236},[186,3101,240],{"class":284},[186,3103,308],{"class":196},[186,3105,746],{"class":213},[186,3107,308],{"class":196},[186,3109,289],{"class":196},[186,3111,201],{"class":200},[186,3113,451],{"class":284},[186,3115,3116,3118,3120,3122,3124,3126],{"class":188,"line":1503},[186,3117,457],{"class":196},[186,3119,1329],{"class":192},[186,3121,247],{"class":284},[186,3123,1334],{"class":200},[186,3125,1237],{"class":284},[186,3127,1339],{"class":196},[186,3129,3130,3132,3134,3136,3138,3141,3144,3146,3149,3151,3153],{"class":188,"line":1509},[186,3131,1217],{"class":192},[186,3133,247],{"class":284},[186,3135,1334],{"class":200},[186,3137,278],{"class":196},[186,3139,3140],{"class":200},"name",[186,3142,3143],{"class":196}," !==",[186,3145,210],{"class":196},[186,3147,3148],{"class":213},"AbortError",[186,3150,308],{"class":196},[186,3152,1237],{"class":284},[186,3154,1339],{"class":196},[186,3156,3157,3159,3161,3163,3165,3167,3169,3171,3173,3175],{"class":188,"line":1524},[186,3158,2180],{"class":200},[186,3160,278],{"class":196},[186,3162,1334],{"class":236},[186,3164,240],{"class":284},[186,3166,308],{"class":196},[186,3168,2228],{"class":213},[186,3170,308],{"class":196},[186,3172,289],{"class":196},[186,3174,2235],{"class":200},[186,3176,451],{"class":284},[186,3178,3179],{"class":188,"line":1538},[186,3180,1413],{"class":196},[186,3182,3183,3185,3187],{"class":188,"line":1544},[186,3184,457],{"class":196},[186,3186,1375],{"class":192},[186,3188,260],{"class":196},[186,3190,3191,3193,3195,3197,3199],{"class":188,"line":1574},[186,3192,2052],{"class":200},[186,3194,278],{"class":196},[186,3196,1254],{"class":200},[186,3198,689],{"class":196},[186,3200,1391],{"class":322},[186,3202,3203,3206,3208],{"class":188,"line":1584},[186,3204,3205],{"class":200},"  abortUpload",[186,3207,689],{"class":196},[186,3209,2909],{"class":196},[186,3211,3212],{"class":188,"line":2367},[186,3213,759],{"class":196},[186,3215,3216],{"class":188,"line":2377},[186,3217,759],{"class":196},[186,3219,3220],{"class":188,"line":2397},[186,3221,224],{"emptyLinePlaceholder":223},[186,3223,3224,3226,3228,3231,3233],{"class":188,"line":2403},[186,3225,244],{"class":243},[186,3227,661],{"class":243},[186,3229,3230],{"class":236}," cancelUpload",[186,3232,2023],{"class":196},[186,3234,260],{"class":196},[186,3236,3237,3239,3241,3243,3245],{"class":188,"line":2412},[186,3238,2931],{"class":192},[186,3240,247],{"class":284},[186,3242,3020],{"class":200},[186,3244,1237],{"class":284},[186,3246,1339],{"class":196},[186,3248,3249,3252,3254],{"class":188,"line":2421},[186,3250,3251],{"class":192},"  await",[186,3253,2880],{"class":236},[186,3255,3256],{"class":284},"()\n",[186,3258,3260,3262,3264,3266,3268],{"class":188,"line":3259},41,[186,3261,2052],{"class":200},[186,3263,278],{"class":196},[186,3265,1254],{"class":200},[186,3267,689],{"class":196},[186,3269,1391],{"class":322},[186,3271,3273],{"class":188,"line":3272},42,[186,3274,759],{"class":196},[186,3276,3278],{"class":188,"line":3277},43,[186,3279,759],{"class":196},[186,3281,3283,3285,3287],{"class":188,"line":3282},44,[186,3284,764],{"class":196},[186,3286,608],{"class":284},[186,3288,627],{"class":196},[186,3290,3292],{"class":188,"line":3291},45,[186,3293,224],{"emptyLinePlaceholder":223},[186,3295,3297,3299,3301],{"class":188,"line":3296},46,[186,3298,605],{"class":196},[186,3300,779],{"class":284},[186,3302,627],{"class":196},[186,3304,3306,3308,3310],{"class":188,"line":3305},47,[186,3307,605],{"class":196},[186,3309,1447],{"class":284},[186,3311,627],{"class":196},[186,3313,3315,3317],{"class":188,"line":3314},48,[186,3316,786],{"class":196},[186,3318,789],{"class":284},[186,3320,3322,3324,3326,3328,3330],{"class":188,"line":3321},49,[186,3323,809],{"class":243},[186,3325,617],{"class":196},[186,3327,620],{"class":196},[186,3329,816],{"class":213},[186,3331,804],{"class":196},[186,3333,3335,3338,3340,3342,3344],{"class":188,"line":3334},50,[186,3336,3337],{"class":243},"    :disabled",[186,3339,617],{"class":196},[186,3341,620],{"class":196},[186,3343,2390],{"class":213},[186,3345,804],{"class":196},[186,3347,3349,3351,3353,3355,3357],{"class":188,"line":3348},51,[186,3350,842],{"class":243},[186,3352,617],{"class":196},[186,3354,620],{"class":196},[186,3356,2322],{"class":213},[186,3358,804],{"class":196},[186,3360,3362],{"class":188,"line":3361},52,[186,3363,857],{"class":196},[186,3365,3367,3369,3371,3373,3375,3377,3380,3382,3384,3386,3388,3391,3393,3395,3397,3399,3402,3404],{"class":188,"line":3366},53,[186,3368,786],{"class":196},[186,3370,2333],{"class":284},[186,3372,1551],{"class":243},[186,3374,617],{"class":196},[186,3376,620],{"class":196},[186,3378,3379],{"class":213},"!uploading",[186,3381,620],{"class":196},[186,3383,2336],{"class":243},[186,3385,617],{"class":196},[186,3387,620],{"class":196},[186,3389,3390],{"class":213},"startUpload",[186,3392,620],{"class":196},[186,3394,2348],{"class":243},[186,3396,617],{"class":196},[186,3398,620],{"class":196},[186,3400,3401],{"class":213},"!file",[186,3403,620],{"class":196},[186,3405,627],{"class":196},[186,3407,3409],{"class":188,"line":3408},54,[186,3410,3411],{"class":200},"    Upload\n",[186,3413,3415,3417,3419],{"class":188,"line":3414},55,[186,3416,1577],{"class":196},[186,3418,2333],{"class":284},[186,3420,627],{"class":196},[186,3422,3424,3426,3428,3431,3433,3435,3437,3440,3442],{"class":188,"line":3423},56,[186,3425,786],{"class":196},[186,3427,2333],{"class":284},[186,3429,3430],{"class":243}," v-else",[186,3432,2336],{"class":243},[186,3434,617],{"class":196},[186,3436,620],{"class":196},[186,3438,3439],{"class":213},"cancelUpload",[186,3441,620],{"class":196},[186,3443,627],{"class":196},[186,3445,3447],{"class":188,"line":3446},57,[186,3448,3449],{"class":200},"    Cancel\n",[186,3451,3453,3455,3457],{"class":188,"line":3452},58,[186,3454,1577],{"class":196},[186,3456,2333],{"class":284},[186,3458,627],{"class":196},[186,3460,3462,3464,3466,3468,3470,3472,3474,3476,3479,3481,3483,3486,3488],{"class":188,"line":3461},59,[186,3463,786],{"class":196},[186,3465,1447],{"class":284},[186,3467,1551],{"class":243},[186,3469,617],{"class":196},[186,3471,620],{"class":196},[186,3473,2390],{"class":213},[186,3475,620],{"class":196},[186,3477,3478],{"class":243}," class",[186,3480,617],{"class":196},[186,3482,620],{"class":196},[186,3484,3485],{"class":213},"progress-bar",[186,3487,620],{"class":196},[186,3489,627],{"class":196},[186,3491,3493,3495,3497,3500,3502,3504,3507,3509],{"class":188,"line":3492},60,[186,3494,1455],{"class":196},[186,3496,1447],{"class":284},[186,3498,3499],{"class":243}," :style",[186,3501,617],{"class":196},[186,3503,620],{"class":196},[186,3505,3506],{"class":213},"{ width: `${progress * 100}%` }",[186,3508,620],{"class":196},[186,3510,3511],{"class":196}," />\n",[186,3513,3515,3517,3519,3521,3524,3526,3528],{"class":188,"line":3514},61,[186,3516,1455],{"class":196},[186,3518,186],{"class":284},[186,3520,1562],{"class":196},[186,3522,3523],{"class":200},"{{ Math.round(progress * 100) }}%",[186,3525,764],{"class":196},[186,3527,186],{"class":284},[186,3529,627],{"class":196},[186,3531,3533,3535,3537],{"class":188,"line":3532},62,[186,3534,1577],{"class":196},[186,3536,1447],{"class":284},[186,3538,627],{"class":196},[186,3540,3542,3544,3546],{"class":188,"line":3541},63,[186,3543,764],{"class":196},[186,3545,1447],{"class":284},[186,3547,627],{"class":196},[186,3549,3551,3553,3555],{"class":188,"line":3550},64,[186,3552,764],{"class":196},[186,3554,779],{"class":284},[186,3556,627],{"class":196},[1615,3558,3559],{"icon":1723,"label":1724},[919,3560,3561,3663],{},[176,3562,3563],{"className":178,"code":2616,"filename":1736,"language":181,"meta":182,"style":182},[156,3564,3565,3583,3587,3609,3627,3637,3651,3657],{"__ignoreMap":182},[186,3566,3567,3569,3571,3573,3575,3577,3579,3581],{"class":188,"line":189},[186,3568,193],{"class":192},[186,3570,197],{"class":196},[186,3572,201],{"class":200},[186,3574,204],{"class":196},[186,3576,207],{"class":192},[186,3578,210],{"class":196},[186,3580,214],{"class":213},[186,3582,217],{"class":196},[186,3584,3585],{"class":188,"line":220},[186,3586,224],{"emptyLinePlaceholder":223},[186,3588,3589,3591,3593,3595,3597,3599,3601,3603,3605,3607],{"class":188,"line":227},[186,3590,230],{"class":192},[186,3592,233],{"class":192},[186,3594,237],{"class":236},[186,3596,240],{"class":200},[186,3598,244],{"class":243},[186,3600,247],{"class":196},[186,3602,251],{"class":250},[186,3604,254],{"class":196},[186,3606,257],{"class":243},[186,3608,260],{"class":196},[186,3610,3611,3613,3615,3617,3619,3621,3623,3625],{"class":188,"line":263},[186,3612,273],{"class":192},[186,3614,201],{"class":200},[186,3616,278],{"class":196},[186,3618,1708],{"class":236},[186,3620,240],{"class":284},[186,3622,251],{"class":200},[186,3624,289],{"class":196},[186,3626,260],{"class":196},[186,3628,3629,3631,3633,3635],{"class":188,"line":270},[186,3630,2685],{"class":284},[186,3632,300],{"class":196},[186,3634,323],{"class":322},[186,3636,311],{"class":196},[186,3638,3639,3641,3643,3645,3647,3649],{"class":188,"line":294},[186,3640,2696],{"class":284},[186,3642,300],{"class":196},[186,3644,210],{"class":196},[186,3646,2703],{"class":213},[186,3648,308],{"class":196},[186,3650,311],{"class":196},[186,3652,3653,3655],{"class":188,"line":314},[186,3654,448],{"class":196},[186,3656,451],{"class":284},[186,3658,3659,3661],{"class":188,"line":328},[186,3660,457],{"class":196},[186,3662,451],{"class":200},[176,3664,3665],{"className":595,"code":2722,"filename":1891,"language":598,"meta":182,"style":182},[156,3666,3667,3687,3709,3729,3741,3747,3751,3777,3793,3809,3841,3845,3857,3875,3879,3891,3903,3907,3943,3951,3955,3975,3987,3993,3997,4003,4015,4037,4051,4075,4097,4101,4109,4121,4129,4133,4137,4141,4153,4165,4173,4185,4189,4193,4201,4205,4213,4221,4227,4239,4251,4263,4267,4305,4309,4317,4337,4341,4349,4377,4395,4411,4419,4427],{"__ignoreMap":182},[186,3668,3669,3671,3673,3675,3677,3679,3681,3683,3685],{"class":188,"line":189},[186,3670,605],{"class":196},[186,3672,608],{"class":284},[186,3674,611],{"class":243},[186,3676,614],{"class":243},[186,3678,617],{"class":196},[186,3680,620],{"class":196},[186,3682,181],{"class":213},[186,3684,620],{"class":196},[186,3686,627],{"class":196},[186,3688,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707],{"class":188,"line":220},[186,3690,632],{"class":243},[186,3692,1920],{"class":200},[186,3694,617],{"class":196},[186,3696,1925],{"class":236},[186,3698,240],{"class":200},[186,3700,308],{"class":196},[186,3702,1932],{"class":213},[186,3704,308],{"class":196},[186,3706,289],{"class":196},[186,3708,260],{"class":196},[186,3710,3711,3713,3715,3717,3719,3721,3723,3725,3727],{"class":188,"line":227},[186,3712,2466],{"class":284},[186,3714,300],{"class":196},[186,3716,2775],{"class":1987},[186,3718,2778],{"class":196},[186,3720,2781],{"class":1987},[186,3722,2778],{"class":196},[186,3724,2781],{"class":1987},[186,3726,289],{"class":196},[186,3728,2790],{"class":266},[186,3730,3731,3733,3735,3737,3739],{"class":188,"line":263},[186,3732,2473],{"class":284},[186,3734,300],{"class":196},[186,3736,2799],{"class":1987},[186,3738,289],{"class":196},[186,3740,2804],{"class":266},[186,3742,3743,3745],{"class":188,"line":270},[186,3744,457],{"class":196},[186,3746,451],{"class":200},[186,3748,3749],{"class":188,"line":294},[186,3750,224],{"emptyLinePlaceholder":223},[186,3752,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771,3773,3775],{"class":188,"line":314},[186,3754,632],{"class":243},[186,3756,1947],{"class":200},[186,3758,617],{"class":196},[186,3760,1163],{"class":236},[186,3762,605],{"class":196},[186,3764,1956],{"class":673},[186,3766,1959],{"class":196},[186,3768,1962],{"class":673},[186,3770,1562],{"class":196},[186,3772,240],{"class":200},[186,3774,1969],{"class":196},[186,3776,451],{"class":200},[186,3778,3779,3781,3783,3785,3787,3789,3791],{"class":188,"line":328},[186,3780,632],{"class":243},[186,3782,1978],{"class":200},[186,3784,617],{"class":196},[186,3786,1163],{"class":236},[186,3788,240],{"class":200},[186,3790,1988],{"class":1987},[186,3792,451],{"class":200},[186,3794,3795,3797,3799,3801,3803,3805,3807],{"class":188,"line":338},[186,3796,632],{"class":243},[186,3798,1997],{"class":200},[186,3800,617],{"class":196},[186,3802,1163],{"class":236},[186,3804,240],{"class":200},[186,3806,1168],{"class":322},[186,3808,451],{"class":200},[186,3810,3811,3813,3815,3817,3819,3821,3823,3825,3827,3829,3831,3833,3835,3837,3839],{"class":188,"line":355},[186,3812,2877],{"class":243},[186,3814,2880],{"class":200},[186,3816,300],{"class":196},[186,3818,247],{"class":200},[186,3820,2023],{"class":196},[186,3822,257],{"class":243},[186,3824,2526],{"class":673},[186,3826,605],{"class":196},[186,3828,2895],{"class":673},[186,3830,1562],{"class":196},[186,3832,1237],{"class":200},[186,3834,2902],{"class":196},[186,3836,1962],{"class":673},[186,3838,689],{"class":196},[186,3840,2909],{"class":196},[186,3842,3843],{"class":188,"line":396},[186,3844,224],{"emptyLinePlaceholder":223},[186,3846,3847,3849,3851,3853,3855],{"class":188,"line":402},[186,3848,244],{"class":243},[186,3850,661],{"class":243},[186,3852,2922],{"class":236},[186,3854,2023],{"class":196},[186,3856,260],{"class":196},[186,3858,3859,3861,3863,3865,3867,3869,3871,3873],{"class":188,"line":412},[186,3860,2931],{"class":192},[186,3862,247],{"class":284},[186,3864,1222],{"class":196},[186,3866,816],{"class":200},[186,3868,278],{"class":196},[186,3870,1254],{"class":200},[186,3872,1237],{"class":284},[186,3874,1240],{"class":192},[186,3876,3877],{"class":188,"line":424},[186,3878,224],{"emptyLinePlaceholder":223},[186,3880,3881,3883,3885,3887,3889],{"class":188,"line":440},[186,3882,2390],{"class":200},[186,3884,278],{"class":196},[186,3886,1254],{"class":200},[186,3888,689],{"class":196},[186,3890,1259],{"class":322},[186,3892,3893,3895,3897,3899,3901],{"class":188,"line":445},[186,3894,2966],{"class":200},[186,3896,278],{"class":196},[186,3898,1254],{"class":200},[186,3900,689],{"class":196},[186,3902,2975],{"class":1987},[186,3904,3905],{"class":188,"line":454},[186,3906,224],{"emptyLinePlaceholder":223},[186,3908,3909,3911,3913,3915,3917,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937,3939,3941],{"class":188,"line":839},[186,3910,632],{"class":243},[186,3912,197],{"class":196},[186,3914,2069],{"class":200},[186,3916,289],{"class":196},[186,3918,2074],{"class":284},[186,3920,300],{"class":196},[186,3922,2079],{"class":200},[186,3924,289],{"class":196},[186,3926,2084],{"class":200},[186,3928,204],{"class":196},[186,3930,689],{"class":196},[186,3932,2091],{"class":236},[186,3934,240],{"class":284},[186,3936,816],{"class":200},[186,3938,278],{"class":196},[186,3940,1254],{"class":200},[186,3942,451],{"class":284},[186,3944,3945,3947,3949],{"class":188,"line":854},[186,3946,3020],{"class":200},[186,3948,689],{"class":196},[186,3950,3025],{"class":200},[186,3952,3953],{"class":188,"line":860},[186,3954,224],{"emptyLinePlaceholder":223},[186,3956,3957,3959,3961,3963,3965,3967,3969,3971,3973],{"class":188,"line":1428},[186,3958,3034],{"class":236},[186,3960,240],{"class":284},[186,3962,2120],{"class":200},[186,3964,289],{"class":196},[186,3966,247],{"class":196},[186,3968,1254],{"class":250},[186,3970,254],{"class":196},[186,3972,257],{"class":243},[186,3974,260],{"class":196},[186,3976,3977,3979,3981,3983,3985],{"class":188,"line":1433},[186,3978,2543],{"class":200},[186,3980,278],{"class":196},[186,3982,1254],{"class":200},[186,3984,689],{"class":196},[186,3986,2146],{"class":200},[186,3988,3989,3991],{"class":188,"line":1442},[186,3990,457],{"class":196},[186,3992,451],{"class":284},[186,3994,3995],{"class":188,"line":1452},[186,3996,224],{"emptyLinePlaceholder":223},[186,3998,3999,4001],{"class":188,"line":1460},[186,4000,3077],{"class":192},[186,4002,260],{"class":196},[186,4004,4005,4007,4009,4011,4013],{"class":188,"line":1475},[186,4006,683],{"class":243},[186,4008,201],{"class":200},[186,4010,689],{"class":196},[186,4012,715],{"class":192},[186,4014,2175],{"class":200},[186,4016,4017,4019,4021,4023,4025,4027,4029,4031,4033,4035],{"class":188,"line":1489},[186,4018,734],{"class":200},[186,4020,278],{"class":196},[186,4022,739],{"class":236},[186,4024,240],{"class":284},[186,4026,308],{"class":196},[186,4028,746],{"class":213},[186,4030,308],{"class":196},[186,4032,289],{"class":196},[186,4034,201],{"class":200},[186,4036,451],{"class":284},[186,4038,4039,4041,4043,4045,4047,4049],{"class":188,"line":1503},[186,4040,457],{"class":196},[186,4042,1329],{"class":192},[186,4044,247],{"class":284},[186,4046,1334],{"class":200},[186,4048,1237],{"class":284},[186,4050,1339],{"class":196},[186,4052,4053,4055,4057,4059,4061,4063,4065,4067,4069,4071,4073],{"class":188,"line":1509},[186,4054,1217],{"class":192},[186,4056,247],{"class":284},[186,4058,1334],{"class":200},[186,4060,278],{"class":196},[186,4062,3140],{"class":200},[186,4064,3143],{"class":196},[186,4066,210],{"class":196},[186,4068,3148],{"class":213},[186,4070,308],{"class":196},[186,4072,1237],{"class":284},[186,4074,1339],{"class":196},[186,4076,4077,4079,4081,4083,4085,4087,4089,4091,4093,4095],{"class":188,"line":1524},[186,4078,2180],{"class":200},[186,4080,278],{"class":196},[186,4082,1334],{"class":236},[186,4084,240],{"class":284},[186,4086,308],{"class":196},[186,4088,2228],{"class":213},[186,4090,308],{"class":196},[186,4092,289],{"class":196},[186,4094,2235],{"class":200},[186,4096,451],{"class":284},[186,4098,4099],{"class":188,"line":1538},[186,4100,1413],{"class":196},[186,4102,4103,4105,4107],{"class":188,"line":1544},[186,4104,457],{"class":196},[186,4106,1375],{"class":192},[186,4108,260],{"class":196},[186,4110,4111,4113,4115,4117,4119],{"class":188,"line":1574},[186,4112,2052],{"class":200},[186,4114,278],{"class":196},[186,4116,1254],{"class":200},[186,4118,689],{"class":196},[186,4120,1391],{"class":322},[186,4122,4123,4125,4127],{"class":188,"line":1584},[186,4124,3205],{"class":200},[186,4126,689],{"class":196},[186,4128,2909],{"class":196},[186,4130,4131],{"class":188,"line":2367},[186,4132,759],{"class":196},[186,4134,4135],{"class":188,"line":2377},[186,4136,759],{"class":196},[186,4138,4139],{"class":188,"line":2397},[186,4140,224],{"emptyLinePlaceholder":223},[186,4142,4143,4145,4147,4149,4151],{"class":188,"line":2403},[186,4144,244],{"class":243},[186,4146,661],{"class":243},[186,4148,3230],{"class":236},[186,4150,2023],{"class":196},[186,4152,260],{"class":196},[186,4154,4155,4157,4159,4161,4163],{"class":188,"line":2412},[186,4156,2931],{"class":192},[186,4158,247],{"class":284},[186,4160,3020],{"class":200},[186,4162,1237],{"class":284},[186,4164,1339],{"class":196},[186,4166,4167,4169,4171],{"class":188,"line":2421},[186,4168,3251],{"class":192},[186,4170,2880],{"class":236},[186,4172,3256],{"class":284},[186,4174,4175,4177,4179,4181,4183],{"class":188,"line":3259},[186,4176,2052],{"class":200},[186,4178,278],{"class":196},[186,4180,1254],{"class":200},[186,4182,689],{"class":196},[186,4184,1391],{"class":322},[186,4186,4187],{"class":188,"line":3272},[186,4188,759],{"class":196},[186,4190,4191],{"class":188,"line":3277},[186,4192,759],{"class":196},[186,4194,4195,4197,4199],{"class":188,"line":3282},[186,4196,764],{"class":196},[186,4198,608],{"class":284},[186,4200,627],{"class":196},[186,4202,4203],{"class":188,"line":3291},[186,4204,224],{"emptyLinePlaceholder":223},[186,4206,4207,4209,4211],{"class":188,"line":3296},[186,4208,605],{"class":196},[186,4210,779],{"class":284},[186,4212,627],{"class":196},[186,4214,4215,4217,4219],{"class":188,"line":3305},[186,4216,605],{"class":196},[186,4218,1447],{"class":284},[186,4220,627],{"class":196},[186,4222,4223,4225],{"class":188,"line":3314},[186,4224,786],{"class":196},[186,4226,789],{"class":284},[186,4228,4229,4231,4233,4235,4237],{"class":188,"line":3321},[186,4230,809],{"class":243},[186,4232,617],{"class":196},[186,4234,620],{"class":196},[186,4236,816],{"class":213},[186,4238,804],{"class":196},[186,4240,4241,4243,4245,4247,4249],{"class":188,"line":3334},[186,4242,3337],{"class":243},[186,4244,617],{"class":196},[186,4246,620],{"class":196},[186,4248,2390],{"class":213},[186,4250,804],{"class":196},[186,4252,4253,4255,4257,4259,4261],{"class":188,"line":3348},[186,4254,842],{"class":243},[186,4256,617],{"class":196},[186,4258,620],{"class":196},[186,4260,2322],{"class":213},[186,4262,804],{"class":196},[186,4264,4265],{"class":188,"line":3361},[186,4266,857],{"class":196},[186,4268,4269,4271,4273,4275,4277,4279,4281,4283,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303],{"class":188,"line":3366},[186,4270,786],{"class":196},[186,4272,2333],{"class":284},[186,4274,1551],{"class":243},[186,4276,617],{"class":196},[186,4278,620],{"class":196},[186,4280,3379],{"class":213},[186,4282,620],{"class":196},[186,4284,2336],{"class":243},[186,4286,617],{"class":196},[186,4288,620],{"class":196},[186,4290,3390],{"class":213},[186,4292,620],{"class":196},[186,4294,2348],{"class":243},[186,4296,617],{"class":196},[186,4298,620],{"class":196},[186,4300,3401],{"class":213},[186,4302,620],{"class":196},[186,4304,627],{"class":196},[186,4306,4307],{"class":188,"line":3408},[186,4308,3411],{"class":200},[186,4310,4311,4313,4315],{"class":188,"line":3414},[186,4312,1577],{"class":196},[186,4314,2333],{"class":284},[186,4316,627],{"class":196},[186,4318,4319,4321,4323,4325,4327,4329,4331,4333,4335],{"class":188,"line":3423},[186,4320,786],{"class":196},[186,4322,2333],{"class":284},[186,4324,3430],{"class":243},[186,4326,2336],{"class":243},[186,4328,617],{"class":196},[186,4330,620],{"class":196},[186,4332,3439],{"class":213},[186,4334,620],{"class":196},[186,4336,627],{"class":196},[186,4338,4339],{"class":188,"line":3446},[186,4340,3449],{"class":200},[186,4342,4343,4345,4347],{"class":188,"line":3452},[186,4344,1577],{"class":196},[186,4346,2333],{"class":284},[186,4348,627],{"class":196},[186,4350,4351,4353,4355,4357,4359,4361,4363,4365,4367,4369,4371,4373,4375],{"class":188,"line":3461},[186,4352,786],{"class":196},[186,4354,1447],{"class":284},[186,4356,1551],{"class":243},[186,4358,617],{"class":196},[186,4360,620],{"class":196},[186,4362,2390],{"class":213},[186,4364,620],{"class":196},[186,4366,3478],{"class":243},[186,4368,617],{"class":196},[186,4370,620],{"class":196},[186,4372,3485],{"class":213},[186,4374,620],{"class":196},[186,4376,627],{"class":196},[186,4378,4379,4381,4383,4385,4387,4389,4391,4393],{"class":188,"line":3492},[186,4380,1455],{"class":196},[186,4382,1447],{"class":284},[186,4384,3499],{"class":243},[186,4386,617],{"class":196},[186,4388,620],{"class":196},[186,4390,3506],{"class":213},[186,4392,620],{"class":196},[186,4394,3511],{"class":196},[186,4396,4397,4399,4401,4403,4405,4407,4409],{"class":188,"line":3514},[186,4398,1455],{"class":196},[186,4400,186],{"class":284},[186,4402,1562],{"class":196},[186,4404,3523],{"class":200},[186,4406,764],{"class":196},[186,4408,186],{"class":284},[186,4410,627],{"class":196},[186,4412,4413,4415,4417],{"class":188,"line":3532},[186,4414,1577],{"class":196},[186,4416,1447],{"class":284},[186,4418,627],{"class":196},[186,4420,4421,4423,4425],{"class":188,"line":3541},[186,4422,764],{"class":196},[186,4424,1447],{"class":284},[186,4426,627],{"class":196},[186,4428,4429,4431,4433],{"class":188,"line":3550},[186,4430,764],{"class":196},[186,4432,779],{"class":284},[186,4434,627],{"class":196},[148,4436,4438],{"id":4437},"advanced-multipart","Advanced Multipart",[144,4440,4441],{},"For more control over the multipart upload process, you can use the low-level APIs directly.",[2589,4443,4444,4445,1625,4447,4449],{},"We recommend using ",[156,4446,1603],{},[156,4448,1884],{}," for most use cases. Use these low-level APIs only when you need custom behavior.",[461,4451,4453],{"id":4452},"createmultipartupload",[156,4454,4455],{},"createMultipartUpload()",[144,4457,4458],{},"Start a new multipart upload.",[176,4460,4463],{"className":178,"code":4461,"filename":4462,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n\n  const mpu = await blob.createMultipartUpload(pathname, {\n    addRandomSuffix: true,\n  })\n\n  return {\n    uploadId: mpu.uploadId,\n    pathname: mpu.pathname,\n  }\n})\n","server/api/files/multipart/[...pathname].post.ts",[156,4464,4465,4483,4487,4509,4531,4535,4561,4571,4577,4581,4587,4603,4618,4622],{"__ignoreMap":182},[186,4466,4467,4469,4471,4473,4475,4477,4479,4481],{"class":188,"line":189},[186,4468,193],{"class":192},[186,4470,197],{"class":196},[186,4472,201],{"class":200},[186,4474,204],{"class":196},[186,4476,207],{"class":192},[186,4478,210],{"class":196},[186,4480,214],{"class":213},[186,4482,217],{"class":196},[186,4484,4485],{"class":188,"line":220},[186,4486,224],{"emptyLinePlaceholder":223},[186,4488,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507],{"class":188,"line":227},[186,4490,230],{"class":192},[186,4492,233],{"class":192},[186,4494,237],{"class":236},[186,4496,240],{"class":200},[186,4498,244],{"class":243},[186,4500,247],{"class":196},[186,4502,251],{"class":250},[186,4504,254],{"class":196},[186,4506,257],{"class":243},[186,4508,260],{"class":196},[186,4510,4511,4513,4515,4518,4520,4522,4525,4527,4529],{"class":188,"line":263},[186,4512,683],{"class":243},[186,4514,197],{"class":196},[186,4516,4517],{"class":200}," pathname",[186,4519,204],{"class":196},[186,4521,689],{"class":196},[186,4523,4524],{"class":236}," getRouterParams",[186,4526,240],{"class":284},[186,4528,251],{"class":200},[186,4530,451],{"class":284},[186,4532,4533],{"class":188,"line":270},[186,4534,224],{"emptyLinePlaceholder":223},[186,4536,4537,4539,4541,4543,4545,4547,4549,4552,4554,4557,4559],{"class":188,"line":294},[186,4538,683],{"class":243},[186,4540,2091],{"class":200},[186,4542,689],{"class":196},[186,4544,715],{"class":192},[186,4546,201],{"class":200},[186,4548,278],{"class":196},[186,4550,4551],{"class":236},"createMultipartUpload",[186,4553,240],{"class":284},[186,4555,4556],{"class":200},"pathname",[186,4558,289],{"class":196},[186,4560,260],{"class":196},[186,4562,4563,4565,4567,4569],{"class":188,"line":314},[186,4564,2685],{"class":284},[186,4566,300],{"class":196},[186,4568,323],{"class":322},[186,4570,311],{"class":196},[186,4572,4573,4575],{"class":188,"line":328},[186,4574,448],{"class":196},[186,4576,451],{"class":284},[186,4578,4579],{"class":188,"line":338},[186,4580,224],{"emptyLinePlaceholder":223},[186,4582,4583,4585],{"class":188,"line":355},[186,4584,273],{"class":192},[186,4586,260],{"class":196},[186,4588,4589,4592,4594,4596,4598,4601],{"class":188,"line":396},[186,4590,4591],{"class":284},"    uploadId",[186,4593,300],{"class":196},[186,4595,2091],{"class":200},[186,4597,278],{"class":196},[186,4599,4600],{"class":200},"uploadId",[186,4602,311],{"class":196},[186,4604,4605,4608,4610,4612,4614,4616],{"class":188,"line":402},[186,4606,4607],{"class":284},"    pathname",[186,4609,300],{"class":196},[186,4611,2091],{"class":200},[186,4613,278],{"class":196},[186,4615,4556],{"class":200},[186,4617,311],{"class":196},[186,4619,4620],{"class":188,"line":412},[186,4621,1413],{"class":196},[186,4623,4624,4626],{"class":188,"line":424},[186,4625,457],{"class":196},[186,4627,451],{"class":200},[494,4629,497],{"id":4630},"params-4",[499,4632,4633,4636],{},[502,4634,4635],{"name":4556,"type":520,":required":505},"The pathname for the blob.",[502,4637,4638],{"name":509,"type":510},[515,4639,4640,4642,4649],{},[502,4641,1822],{"name":1821,"type":520},[502,4643,1830,4644,4646,4647,278],{"name":1829,"type":528},[156,4645,505],{},", a random suffix will be added to the pathname. Defaults to ",[156,4648,1168],{},[502,4650,1839],{"name":1838,"type":520},[494,4652,562],{"id":4653},"return-4",[144,4655,565,4656,4662],{},[545,4657,4659],{"href":4658},"#blobmultipartupload",[156,4660,4661],{},"BlobMultipartUpload"," object.",[461,4664,4666],{"id":4665},"resumemultipartupload",[156,4667,4668],{},"resumeMultipartUpload()",[144,4670,4671],{},"Resume an existing multipart upload to upload parts, complete, or abort it.",[144,4673,4674],{},[2433,4675,4676],{},"Upload a part:",[176,4678,4681],{"className":178,"code":4679,"filename":4680,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n  const { uploadId, partNumber } = getQuery(event)\n  const body = await readRawBody(event)\n\n  const mpu = blob.resumeMultipartUpload(pathname, uploadId as string)\n  return mpu.uploadPart(Number(partNumber), body)\n})\n","server/api/files/multipart/[...pathname].put.ts",[156,4682,4683,4701,4705,4727,4747,4774,4794,4798,4828,4857],{"__ignoreMap":182},[186,4684,4685,4687,4689,4691,4693,4695,4697,4699],{"class":188,"line":189},[186,4686,193],{"class":192},[186,4688,197],{"class":196},[186,4690,201],{"class":200},[186,4692,204],{"class":196},[186,4694,207],{"class":192},[186,4696,210],{"class":196},[186,4698,214],{"class":213},[186,4700,217],{"class":196},[186,4702,4703],{"class":188,"line":220},[186,4704,224],{"emptyLinePlaceholder":223},[186,4706,4707,4709,4711,4713,4715,4717,4719,4721,4723,4725],{"class":188,"line":227},[186,4708,230],{"class":192},[186,4710,233],{"class":192},[186,4712,237],{"class":236},[186,4714,240],{"class":200},[186,4716,244],{"class":243},[186,4718,247],{"class":196},[186,4720,251],{"class":250},[186,4722,254],{"class":196},[186,4724,257],{"class":243},[186,4726,260],{"class":196},[186,4728,4729,4731,4733,4735,4737,4739,4741,4743,4745],{"class":188,"line":263},[186,4730,683],{"class":243},[186,4732,197],{"class":196},[186,4734,4517],{"class":200},[186,4736,204],{"class":196},[186,4738,689],{"class":196},[186,4740,4524],{"class":236},[186,4742,240],{"class":284},[186,4744,251],{"class":200},[186,4746,451],{"class":284},[186,4748,4749,4751,4753,4756,4758,4761,4763,4765,4768,4770,4772],{"class":188,"line":270},[186,4750,683],{"class":243},[186,4752,197],{"class":196},[186,4754,4755],{"class":200}," uploadId",[186,4757,289],{"class":196},[186,4759,4760],{"class":200}," partNumber",[186,4762,204],{"class":196},[186,4764,689],{"class":196},[186,4766,4767],{"class":236}," getQuery",[186,4769,240],{"class":284},[186,4771,251],{"class":200},[186,4773,451],{"class":284},[186,4775,4776,4778,4781,4783,4785,4788,4790,4792],{"class":188,"line":294},[186,4777,683],{"class":243},[186,4779,4780],{"class":200}," body",[186,4782,689],{"class":196},[186,4784,715],{"class":192},[186,4786,4787],{"class":236}," readRawBody",[186,4789,240],{"class":284},[186,4791,251],{"class":200},[186,4793,451],{"class":284},[186,4795,4796],{"class":188,"line":314},[186,4797,224],{"emptyLinePlaceholder":223},[186,4799,4800,4802,4804,4806,4808,4810,4813,4815,4817,4819,4821,4823,4826],{"class":188,"line":328},[186,4801,683],{"class":243},[186,4803,2091],{"class":200},[186,4805,689],{"class":196},[186,4807,201],{"class":200},[186,4809,278],{"class":196},[186,4811,4812],{"class":236},"resumeMultipartUpload",[186,4814,240],{"class":284},[186,4816,4556],{"class":200},[186,4818,289],{"class":196},[186,4820,4755],{"class":200},[186,4822,700],{"class":192},[186,4824,4825],{"class":673}," string",[186,4827,451],{"class":284},[186,4829,4830,4832,4834,4836,4839,4841,4844,4846,4849,4851,4853,4855],{"class":188,"line":338},[186,4831,273],{"class":192},[186,4833,2091],{"class":200},[186,4835,278],{"class":196},[186,4837,4838],{"class":236},"uploadPart",[186,4840,240],{"class":284},[186,4842,4843],{"class":236},"Number",[186,4845,240],{"class":284},[186,4847,4848],{"class":200},"partNumber",[186,4850,254],{"class":284},[186,4852,289],{"class":196},[186,4854,4780],{"class":200},[186,4856,451],{"class":284},[186,4858,4859,4861],{"class":188,"line":355},[186,4860,457],{"class":196},[186,4862,451],{"class":200},[144,4864,4865],{},[2433,4866,4867],{},"Complete the upload:",[176,4869,4872],{"className":178,"code":4870,"filename":4871,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  const { pathname, uploadId } = getQuery(event)\n  const parts = await readBody(event)\n\n  const mpu = blob.resumeMultipartUpload(pathname as string, uploadId as string)\n  return mpu.complete(parts)\n})\n","server/api/files/multipart/complete.post.ts",[156,4873,4874,4892,4896,4918,4942,4962,4966,4998,5015],{"__ignoreMap":182},[186,4875,4876,4878,4880,4882,4884,4886,4888,4890],{"class":188,"line":189},[186,4877,193],{"class":192},[186,4879,197],{"class":196},[186,4881,201],{"class":200},[186,4883,204],{"class":196},[186,4885,207],{"class":192},[186,4887,210],{"class":196},[186,4889,214],{"class":213},[186,4891,217],{"class":196},[186,4893,4894],{"class":188,"line":220},[186,4895,224],{"emptyLinePlaceholder":223},[186,4897,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916],{"class":188,"line":227},[186,4899,230],{"class":192},[186,4901,233],{"class":192},[186,4903,237],{"class":236},[186,4905,240],{"class":200},[186,4907,244],{"class":243},[186,4909,247],{"class":196},[186,4911,251],{"class":250},[186,4913,254],{"class":196},[186,4915,257],{"class":243},[186,4917,260],{"class":196},[186,4919,4920,4922,4924,4926,4928,4930,4932,4934,4936,4938,4940],{"class":188,"line":263},[186,4921,683],{"class":243},[186,4923,197],{"class":196},[186,4925,4517],{"class":200},[186,4927,289],{"class":196},[186,4929,4755],{"class":200},[186,4931,204],{"class":196},[186,4933,689],{"class":196},[186,4935,4767],{"class":236},[186,4937,240],{"class":284},[186,4939,251],{"class":200},[186,4941,451],{"class":284},[186,4943,4944,4946,4949,4951,4953,4956,4958,4960],{"class":188,"line":270},[186,4945,683],{"class":243},[186,4947,4948],{"class":200}," parts",[186,4950,689],{"class":196},[186,4952,715],{"class":192},[186,4954,4955],{"class":236}," readBody",[186,4957,240],{"class":284},[186,4959,251],{"class":200},[186,4961,451],{"class":284},[186,4963,4964],{"class":188,"line":294},[186,4965,224],{"emptyLinePlaceholder":223},[186,4967,4968,4970,4972,4974,4976,4978,4980,4982,4984,4986,4988,4990,4992,4994,4996],{"class":188,"line":314},[186,4969,683],{"class":243},[186,4971,2091],{"class":200},[186,4973,689],{"class":196},[186,4975,201],{"class":200},[186,4977,278],{"class":196},[186,4979,4812],{"class":236},[186,4981,240],{"class":284},[186,4983,4556],{"class":200},[186,4985,700],{"class":192},[186,4987,4825],{"class":673},[186,4989,289],{"class":196},[186,4991,4755],{"class":200},[186,4993,700],{"class":192},[186,4995,4825],{"class":673},[186,4997,451],{"class":284},[186,4999,5000,5002,5004,5006,5008,5010,5013],{"class":188,"line":328},[186,5001,273],{"class":192},[186,5003,2091],{"class":200},[186,5005,278],{"class":196},[186,5007,1643],{"class":236},[186,5009,240],{"class":284},[186,5011,5012],{"class":200},"parts",[186,5014,451],{"class":284},[186,5016,5017,5019],{"class":188,"line":338},[186,5018,457],{"class":196},[186,5020,451],{"class":200},[144,5022,5023],{},[2433,5024,5025],{},"Abort the upload:",[176,5027,5030],{"className":178,"code":5028,"filename":5029,"language":181,"meta":182,"style":182},"import { blob } from 'hub:blob'\n\nexport default eventHandler(async (event) => {\n  const { pathname } = getRouterParams(event)\n  const { uploadId } = getQuery(event)\n\n  const mpu = blob.resumeMultipartUpload(pathname, uploadId as string)\n  await mpu.abort()\n\n  return sendNoContent(event)\n})\n","server/api/files/multipart/[...pathname].delete.ts",[156,5031,5032,5050,5054,5076,5096,5116,5120,5148,5160,5164,5177],{"__ignoreMap":182},[186,5033,5034,5036,5038,5040,5042,5044,5046,5048],{"class":188,"line":189},[186,5035,193],{"class":192},[186,5037,197],{"class":196},[186,5039,201],{"class":200},[186,5041,204],{"class":196},[186,5043,207],{"class":192},[186,5045,210],{"class":196},[186,5047,214],{"class":213},[186,5049,217],{"class":196},[186,5051,5052],{"class":188,"line":220},[186,5053,224],{"emptyLinePlaceholder":223},[186,5055,5056,5058,5060,5062,5064,5066,5068,5070,5072,5074],{"class":188,"line":227},[186,5057,230],{"class":192},[186,5059,233],{"class":192},[186,5061,237],{"class":236},[186,5063,240],{"class":200},[186,5065,244],{"class":243},[186,5067,247],{"class":196},[186,5069,251],{"class":250},[186,5071,254],{"class":196},[186,5073,257],{"class":243},[186,5075,260],{"class":196},[186,5077,5078,5080,5082,5084,5086,5088,5090,5092,5094],{"class":188,"line":263},[186,5079,683],{"class":243},[186,5081,197],{"class":196},[186,5083,4517],{"class":200},[186,5085,204],{"class":196},[186,5087,689],{"class":196},[186,5089,4524],{"class":236},[186,5091,240],{"class":284},[186,5093,251],{"class":200},[186,5095,451],{"class":284},[186,5097,5098,5100,5102,5104,5106,5108,5110,5112,5114],{"class":188,"line":270},[186,5099,683],{"class":243},[186,5101,197],{"class":196},[186,5103,4755],{"class":200},[186,5105,204],{"class":196},[186,5107,689],{"class":196},[186,5109,4767],{"class":236},[186,5111,240],{"class":284},[186,5113,251],{"class":200},[186,5115,451],{"class":284},[186,5117,5118],{"class":188,"line":294},[186,5119,224],{"emptyLinePlaceholder":223},[186,5121,5122,5124,5126,5128,5130,5132,5134,5136,5138,5140,5142,5144,5146],{"class":188,"line":314},[186,5123,683],{"class":243},[186,5125,2091],{"class":200},[186,5127,689],{"class":196},[186,5129,201],{"class":200},[186,5131,278],{"class":196},[186,5133,4812],{"class":236},[186,5135,240],{"class":284},[186,5137,4556],{"class":200},[186,5139,289],{"class":196},[186,5141,4755],{"class":200},[186,5143,700],{"class":192},[186,5145,4825],{"class":673},[186,5147,451],{"class":284},[186,5149,5150,5152,5154,5156,5158],{"class":188,"line":328},[186,5151,3251],{"class":192},[186,5153,2091],{"class":200},[186,5155,278],{"class":196},[186,5157,1646],{"class":236},[186,5159,3256],{"class":284},[186,5161,5162],{"class":188,"line":338},[186,5163,224],{"emptyLinePlaceholder":223},[186,5165,5166,5168,5171,5173,5175],{"class":188,"line":355},[186,5167,273],{"class":192},[186,5169,5170],{"class":236}," sendNoContent",[186,5172,240],{"class":284},[186,5174,251],{"class":200},[186,5176,451],{"class":284},[186,5178,5179,5181],{"class":188,"line":396},[186,5180,457],{"class":196},[186,5182,451],{"class":200},[494,5184,497],{"id":5185},"params-5",[499,5187,5188,5191],{},[502,5189,5190],{"name":4556,"type":520,":required":505},"The pathname of the multipart upload.",[502,5192,5193,5194,278],{"name":4600,"type":520,":required":505},"The upload ID from ",[156,5195,4455],{},[494,5197,562],{"id":5198},"return-5",[144,5200,565,5201,5205],{},[545,5202,5203],{"href":4658},[156,5204,4661],{}," object with methods:",[1847,5207,5208,5214,5220],{},[1850,5209,5210,5213],{},[156,5211,5212],{},"uploadPart(partNumber, body)",": Upload a single part",[1850,5215,5216,5219],{},[156,5217,5218],{},"complete(parts)",": Complete the upload with all uploaded parts",[1850,5221,5222,5225],{},[156,5223,5224],{},"abort()",": Cancel the upload",[461,5227,5229],{"id":5228},"client-implementation-example","Client Implementation Example",[176,5231,5234],{"className":178,"code":5232,"filename":5233,"language":181,"meta":182,"style":182},"async function uploadLargeFile(file: File) {\n  const chunkSize = 10 * 1024 * 1024 // 10MB per part\n\n  // 1. Create the multipart upload\n  const { pathname, uploadId } = await $fetch(`/api/files/multipart/${file.name}`, {\n    method: 'POST',\n  })\n\n  // 2. Upload parts\n  const totalParts = Math.ceil(file.size / chunkSize)\n  const uploadedParts = []\n\n  for (let i = 0; i \u003C totalParts; i++) {\n    const start = i * chunkSize\n    const end = Math.min(start + chunkSize, file.size)\n    const chunk = file.slice(start, end)\n    const partNumber = i + 1\n\n    const part = await $fetch(`/api/files/multipart/${pathname}`, {\n      method: 'PUT',\n      query: { uploadId, partNumber },\n      body: chunk,\n    })\n\n    uploadedParts.push(part)\n    console.log(`Uploaded part ${partNumber}/${totalParts}`)\n  }\n\n  // 3. Complete the upload\n  const blob = await $fetch('/api/files/multipart/complete', {\n    method: 'POST',\n    query: { pathname, uploadId },\n    body: uploadedParts,\n  })\n\n  return blob\n}\n","app/utils/multipart-upload.ts",[156,5235,5236,5258,5280,5284,5289,5331,5347,5353,5357,5362,5395,5407,5411,5449,5465,5502,5528,5543,5547,5576,5592,5610,5621,5628,5632,5649,5682,5686,5690,5695,5720,5734,5751,5762,5768,5772,5779],{"__ignoreMap":182},[186,5237,5238,5240,5242,5245,5247,5249,5251,5254,5256],{"class":188,"line":189},[186,5239,244],{"class":243},[186,5241,661],{"class":243},[186,5243,5244],{"class":236}," uploadLargeFile",[186,5246,240],{"class":196},[186,5248,816],{"class":250},[186,5250,300],{"class":196},[186,5252,5253],{"class":673}," File",[186,5255,254],{"class":196},[186,5257,260],{"class":196},[186,5259,5260,5262,5265,5267,5269,5271,5273,5275,5277],{"class":188,"line":220},[186,5261,683],{"class":243},[186,5263,5264],{"class":200}," chunkSize",[186,5266,689],{"class":196},[186,5268,2775],{"class":1987},[186,5270,2778],{"class":196},[186,5272,2781],{"class":1987},[186,5274,2778],{"class":196},[186,5276,2781],{"class":1987},[186,5278,5279],{"class":266}," // 10MB per part\n",[186,5281,5282],{"class":188,"line":227},[186,5283,224],{"emptyLinePlaceholder":223},[186,5285,5286],{"class":188,"line":263},[186,5287,5288],{"class":266},"  // 1. Create the multipart upload\n",[186,5290,5291,5293,5295,5297,5299,5301,5303,5305,5307,5310,5312,5314,5317,5319,5321,5323,5325,5327,5329],{"class":188,"line":270},[186,5292,683],{"class":243},[186,5294,197],{"class":196},[186,5296,4517],{"class":200},[186,5298,289],{"class":196},[186,5300,4755],{"class":200},[186,5302,204],{"class":196},[186,5304,689],{"class":196},[186,5306,715],{"class":192},[186,5308,5309],{"class":236}," $fetch",[186,5311,240],{"class":284},[186,5313,1300],{"class":196},[186,5315,5316],{"class":213},"/api/files/multipart/",[186,5318,1306],{"class":196},[186,5320,816],{"class":200},[186,5322,278],{"class":196},[186,5324,3140],{"class":200},[186,5326,1366],{"class":196},[186,5328,289],{"class":196},[186,5330,260],{"class":196},[186,5332,5333,5336,5338,5340,5343,5345],{"class":188,"line":294},[186,5334,5335],{"class":284},"    method",[186,5337,300],{"class":196},[186,5339,210],{"class":196},[186,5341,5342],{"class":213},"POST",[186,5344,308],{"class":196},[186,5346,311],{"class":196},[186,5348,5349,5351],{"class":188,"line":314},[186,5350,448],{"class":196},[186,5352,451],{"class":284},[186,5354,5355],{"class":188,"line":328},[186,5356,224],{"emptyLinePlaceholder":223},[186,5358,5359],{"class":188,"line":338},[186,5360,5361],{"class":266},"  // 2. Upload parts\n",[186,5363,5364,5366,5369,5371,5374,5376,5379,5381,5383,5385,5388,5391,5393],{"class":188,"line":355},[186,5365,683],{"class":243},[186,5367,5368],{"class":200}," totalParts",[186,5370,689],{"class":196},[186,5372,5373],{"class":200}," Math",[186,5375,278],{"class":196},[186,5377,5378],{"class":236},"ceil",[186,5380,240],{"class":284},[186,5382,816],{"class":200},[186,5384,278],{"class":196},[186,5386,5387],{"class":200},"size",[186,5389,5390],{"class":196}," /",[186,5392,5264],{"class":200},[186,5394,451],{"class":284},[186,5396,5397,5399,5402,5404],{"class":188,"line":396},[186,5398,683],{"class":243},[186,5400,5401],{"class":200}," uploadedParts",[186,5403,689],{"class":196},[186,5405,5406],{"class":284}," []\n",[186,5408,5409],{"class":188,"line":402},[186,5410,224],{"emptyLinePlaceholder":223},[186,5412,5413,5416,5418,5420,5423,5425,5428,5431,5433,5436,5438,5440,5442,5445,5447],{"class":188,"line":412},[186,5414,5415],{"class":192},"  for",[186,5417,247],{"class":284},[186,5419,2877],{"class":243},[186,5421,5422],{"class":200}," i",[186,5424,689],{"class":196},[186,5426,5427],{"class":1987}," 0",[186,5429,5430],{"class":196},";",[186,5432,5422],{"class":200},[186,5434,5435],{"class":196}," \u003C",[186,5437,5368],{"class":200},[186,5439,5430],{"class":196},[186,5441,5422],{"class":200},[186,5443,5444],{"class":196},"++",[186,5446,1237],{"class":284},[186,5448,1339],{"class":196},[186,5450,5451,5453,5456,5458,5460,5462],{"class":188,"line":424},[186,5452,1271],{"class":243},[186,5454,5455],{"class":200}," start",[186,5457,689],{"class":196},[186,5459,5422],{"class":200},[186,5461,2778],{"class":196},[186,5463,5464],{"class":200}," chunkSize\n",[186,5466,5467,5469,5472,5474,5476,5478,5481,5483,5486,5489,5491,5493,5496,5498,5500],{"class":188,"line":440},[186,5468,1271],{"class":243},[186,5470,5471],{"class":200}," end",[186,5473,689],{"class":196},[186,5475,5373],{"class":200},[186,5477,278],{"class":196},[186,5479,5480],{"class":236},"min",[186,5482,240],{"class":284},[186,5484,5485],{"class":200},"start",[186,5487,5488],{"class":196}," +",[186,5490,5264],{"class":200},[186,5492,289],{"class":196},[186,5494,5495],{"class":200}," file",[186,5497,278],{"class":196},[186,5499,5387],{"class":200},[186,5501,451],{"class":284},[186,5503,5504,5506,5509,5511,5513,5515,5518,5520,5522,5524,5526],{"class":188,"line":445},[186,5505,1271],{"class":243},[186,5507,5508],{"class":200}," chunk",[186,5510,689],{"class":196},[186,5512,5495],{"class":200},[186,5514,278],{"class":196},[186,5516,5517],{"class":236},"slice",[186,5519,240],{"class":284},[186,5521,5485],{"class":200},[186,5523,289],{"class":196},[186,5525,5471],{"class":200},[186,5527,451],{"class":284},[186,5529,5530,5532,5534,5536,5538,5540],{"class":188,"line":454},[186,5531,1271],{"class":243},[186,5533,4760],{"class":200},[186,5535,689],{"class":196},[186,5537,5422],{"class":200},[186,5539,5488],{"class":196},[186,5541,5542],{"class":1987}," 1\n",[186,5544,5545],{"class":188,"line":839},[186,5546,224],{"emptyLinePlaceholder":223},[186,5548,5549,5551,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574],{"class":188,"line":854},[186,5550,1271],{"class":243},[186,5552,5553],{"class":200}," part",[186,5555,689],{"class":196},[186,5557,715],{"class":192},[186,5559,5309],{"class":236},[186,5561,240],{"class":284},[186,5563,1300],{"class":196},[186,5565,5316],{"class":213},[186,5567,1306],{"class":196},[186,5569,4556],{"class":200},[186,5571,1366],{"class":196},[186,5573,289],{"class":196},[186,5575,260],{"class":196},[186,5577,5578,5581,5583,5585,5588,5590],{"class":188,"line":860},[186,5579,5580],{"class":284},"      method",[186,5582,300],{"class":196},[186,5584,210],{"class":196},[186,5586,5587],{"class":213},"PUT",[186,5589,308],{"class":196},[186,5591,311],{"class":196},[186,5593,5594,5597,5599,5601,5603,5605,5607],{"class":188,"line":1428},[186,5595,5596],{"class":284},"      query",[186,5598,300],{"class":196},[186,5600,197],{"class":196},[186,5602,4755],{"class":200},[186,5604,289],{"class":196},[186,5606,4760],{"class":200},[186,5608,5609],{"class":196}," },\n",[186,5611,5612,5615,5617,5619],{"class":188,"line":1433},[186,5613,5614],{"class":284},"      body",[186,5616,300],{"class":196},[186,5618,5508],{"class":200},[186,5620,311],{"class":196},[186,5622,5623,5626],{"class":188,"line":1442},[186,5624,5625],{"class":196},"    }",[186,5627,451],{"class":284},[186,5629,5630],{"class":188,"line":1452},[186,5631,224],{"emptyLinePlaceholder":223},[186,5633,5634,5637,5639,5642,5644,5647],{"class":188,"line":1460},[186,5635,5636],{"class":200},"    uploadedParts",[186,5638,278],{"class":196},[186,5640,5641],{"class":236},"push",[186,5643,240],{"class":284},[186,5645,5646],{"class":200},"part",[186,5648,451],{"class":284},[186,5650,5651,5653,5655,5657,5659,5661,5664,5666,5668,5670,5673,5675,5678,5680],{"class":188,"line":1475},[186,5652,2180],{"class":200},[186,5654,278],{"class":196},[186,5656,739],{"class":236},[186,5658,240],{"class":284},[186,5660,1300],{"class":196},[186,5662,5663],{"class":213},"Uploaded part ",[186,5665,1306],{"class":196},[186,5667,4848],{"class":200},[186,5669,457],{"class":196},[186,5671,5672],{"class":213},"/",[186,5674,1306],{"class":196},[186,5676,5677],{"class":200},"totalParts",[186,5679,1366],{"class":196},[186,5681,451],{"class":284},[186,5683,5684],{"class":188,"line":1489},[186,5685,1413],{"class":196},[186,5687,5688],{"class":188,"line":1503},[186,5689,224],{"emptyLinePlaceholder":223},[186,5691,5692],{"class":188,"line":1509},[186,5693,5694],{"class":266},"  // 3. Complete the upload\n",[186,5696,5697,5699,5701,5703,5705,5707,5709,5711,5714,5716,5718],{"class":188,"line":1524},[186,5698,683],{"class":243},[186,5700,201],{"class":200},[186,5702,689],{"class":196},[186,5704,715],{"class":192},[186,5706,5309],{"class":236},[186,5708,240],{"class":284},[186,5710,308],{"class":196},[186,5712,5713],{"class":213},"/api/files/multipart/complete",[186,5715,308],{"class":196},[186,5717,289],{"class":196},[186,5719,260],{"class":196},[186,5721,5722,5724,5726,5728,5730,5732],{"class":188,"line":1538},[186,5723,5335],{"class":284},[186,5725,300],{"class":196},[186,5727,210],{"class":196},[186,5729,5342],{"class":213},[186,5731,308],{"class":196},[186,5733,311],{"class":196},[186,5735,5736,5739,5741,5743,5745,5747,5749],{"class":188,"line":1544},[186,5737,5738],{"class":284},"    query",[186,5740,300],{"class":196},[186,5742,197],{"class":196},[186,5744,4517],{"class":200},[186,5746,289],{"class":196},[186,5748,4755],{"class":200},[186,5750,5609],{"class":196},[186,5752,5753,5756,5758,5760],{"class":188,"line":1574},[186,5754,5755],{"class":284},"    body",[186,5757,300],{"class":196},[186,5759,5401],{"class":200},[186,5761,311],{"class":196},[186,5763,5764,5766],{"class":188,"line":1584},[186,5765,448],{"class":196},[186,5767,451],{"class":284},[186,5769,5770],{"class":188,"line":2367},[186,5771,224],{"emptyLinePlaceholder":223},[186,5773,5774,5776],{"class":188,"line":2377},[186,5775,273],{"class":192},[186,5777,5778],{"class":200}," blob\n",[186,5780,5781],{"class":188,"line":2397},[186,5782,759],{"class":196},[148,5784,5786],{"id":5785},"types","Types",[461,5788,5790],{"id":5789},"blobobject",[156,5791,535],{},[176,5793,5797],{"className":5794,"code":5795,"language":5796,"meta":182,"style":182},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\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 | undefined\n}\n","ts-type",[156,5798,5799,5803,5813,5827,5837,5850,5860,5880,5899,5912],{"__ignoreMap":182},[186,5800,5801],{"class":188,"line":189},[186,5802,1339],{"class":196},[186,5804,5805,5808,5810],{"class":188,"line":220},[186,5806,5807],{"class":284},"  pathname",[186,5809,300],{"class":196},[186,5811,5812],{"class":673}," string\n",[186,5814,5815,5818,5820,5822,5824],{"class":188,"line":227},[186,5816,5817],{"class":284},"  contentType",[186,5819,300],{"class":196},[186,5821,4825],{"class":673},[186,5823,1959],{"class":196},[186,5825,5826],{"class":673}," undefined\n",[186,5828,5829,5832,5834],{"class":188,"line":263},[186,5830,5831],{"class":284},"  size",[186,5833,300],{"class":196},[186,5835,5836],{"class":673}," number\n",[186,5838,5839,5842,5844,5846,5848],{"class":188,"line":270},[186,5840,5841],{"class":284},"  httpEtag",[186,5843,300],{"class":196},[186,5845,4825],{"class":673},[186,5847,1959],{"class":196},[186,5849,5826],{"class":673},[186,5851,5852,5855,5857],{"class":188,"line":294},[186,5853,5854],{"class":284},"  uploadedAt",[186,5856,300],{"class":196},[186,5858,5859],{"class":673}," Date\n",[186,5861,5862,5865,5867,5870,5872,5874,5876,5878],{"class":188,"line":314},[186,5863,5864],{"class":284},"  httpMetadata",[186,5866,300],{"class":196},[186,5868,5869],{"class":673}," Record",[186,5871,605],{"class":196},[186,5873,520],{"class":673},[186,5875,289],{"class":196},[186,5877,4825],{"class":673},[186,5879,627],{"class":196},[186,5881,5882,5885,5887,5889,5891,5893,5895,5897],{"class":188,"line":328},[186,5883,5884],{"class":284},"  customMetadata",[186,5886,300],{"class":196},[186,5888,5869],{"class":673},[186,5890,605],{"class":196},[186,5892,520],{"class":673},[186,5894,289],{"class":196},[186,5896,4825],{"class":673},[186,5898,627],{"class":196},[186,5900,5901,5904,5906,5908,5910],{"class":188,"line":338},[186,5902,5903],{"class":284},"  url",[186,5905,300],{"class":196},[186,5907,4825],{"class":673},[186,5909,1959],{"class":196},[186,5911,5826],{"class":673},[186,5913,5914],{"class":188,"line":355},[186,5915,759],{"class":196},[461,5917,5919],{"id":5918},"blobmultipartupload",[156,5920,4661],{},[176,5922,5924],{"className":5794,"code":5923,"language":5796,"meta":182,"style":182},"{\n  pathname: string\n  uploadId: string\n  uploadPart(\n    partNumber: number,\n    value: string | ReadableStream\u003Cany> | ArrayBuffer | ArrayBufferView | Blob\n  ): Promise\u003CBlobUploadedPart>\n  abort(): Promise\u003Cvoid>\n  complete(uploadedParts: BlobUploadedPart[]): Promise\u003CBlobObject>\n}\n",[156,5925,5926,5930,5938,5947,5955,5967,6003,6017,6032,6061],{"__ignoreMap":182},[186,5927,5928],{"class":188,"line":189},[186,5929,1339],{"class":196},[186,5931,5932,5934,5936],{"class":188,"line":220},[186,5933,5807],{"class":284},[186,5935,300],{"class":196},[186,5937,5812],{"class":673},[186,5939,5940,5943,5945],{"class":188,"line":227},[186,5941,5942],{"class":284},"  uploadId",[186,5944,300],{"class":196},[186,5946,5812],{"class":673},[186,5948,5949,5952],{"class":188,"line":263},[186,5950,5951],{"class":284},"  uploadPart",[186,5953,5954],{"class":196},"(\n",[186,5956,5957,5960,5962,5965],{"class":188,"line":270},[186,5958,5959],{"class":250},"    partNumber",[186,5961,300],{"class":196},[186,5963,5964],{"class":673}," number",[186,5966,311],{"class":196},[186,5968,5969,5972,5974,5976,5978,5981,5983,5986,5988,5990,5993,5995,5998,6000],{"class":188,"line":294},[186,5970,5971],{"class":250},"    value",[186,5973,300],{"class":196},[186,5975,4825],{"class":673},[186,5977,1959],{"class":196},[186,5979,5980],{"class":673}," ReadableStream",[186,5982,605],{"class":196},[186,5984,5985],{"class":673},"any",[186,5987,1562],{"class":196},[186,5989,1959],{"class":196},[186,5991,5992],{"class":673}," ArrayBuffer",[186,5994,1959],{"class":196},[186,5996,5997],{"class":673}," ArrayBufferView",[186,5999,1959],{"class":196},[186,6001,6002],{"class":673}," Blob\n",[186,6004,6005,6008,6010,6012,6015],{"class":188,"line":314},[186,6006,6007],{"class":196},"  ):",[186,6009,2526],{"class":673},[186,6011,605],{"class":196},[186,6013,6014],{"class":673},"BlobUploadedPart",[186,6016,627],{"class":196},[186,6018,6019,6021,6024,6026,6028,6030],{"class":188,"line":328},[186,6020,2568],{"class":284},[186,6022,6023],{"class":196},"():",[186,6025,2526],{"class":673},[186,6027,605],{"class":196},[186,6029,2895],{"class":673},[186,6031,627],{"class":196},[186,6033,6034,6037,6039,6042,6044,6047,6050,6053,6055,6057,6059],{"class":188,"line":338},[186,6035,6036],{"class":284},"  complete",[186,6038,240],{"class":196},[186,6040,6041],{"class":250},"uploadedParts",[186,6043,300],{"class":196},[186,6045,6046],{"class":673}," BlobUploadedPart",[186,6048,6049],{"class":200},"[]",[186,6051,6052],{"class":196},"):",[186,6054,2526],{"class":673},[186,6056,605],{"class":196},[186,6058,535],{"class":673},[186,6060,627],{"class":196},[186,6062,6063],{"class":188,"line":355},[186,6064,759],{"class":196},[461,6066,6068],{"id":6067},"blobuploadedpart",[156,6069,6014],{},[176,6071,6073],{"className":5794,"code":6072,"language":5796,"meta":182,"style":182},"{\n  partNumber: number\n  etag: string\n}\n",[156,6074,6075,6079,6088,6097],{"__ignoreMap":182},[186,6076,6077],{"class":188,"line":189},[186,6078,1339],{"class":196},[186,6080,6081,6084,6086],{"class":188,"line":220},[186,6082,6083],{"class":284},"  partNumber",[186,6085,300],{"class":196},[186,6087,5836],{"class":673},[186,6089,6090,6093,6095],{"class":188,"line":227},[186,6091,6092],{"class":284},"  etag",[186,6094,300],{"class":196},[186,6096,5812],{"class":673},[186,6098,6099],{"class":188,"line":263},[186,6100,759],{"class":196},[461,6102,6104],{"id":6103},"multipartuploader",[156,6105,6106],{},"MultipartUploader",[176,6108,6110],{"className":5794,"code":6109,"language":5796,"meta":182,"style":182},"(file: File) => {\n  completed: Promise\u003CBlobObject | undefined>\n  progress: Readonly\u003CRef\u003Cnumber>>\n  abort: () => Promise\u003Cvoid>\n}\n",[156,6111,6112,6128,6147,6166,6184],{"__ignoreMap":182},[186,6113,6114,6116,6118,6120,6122,6124,6126],{"class":188,"line":189},[186,6115,240],{"class":196},[186,6117,816],{"class":250},[186,6119,300],{"class":196},[186,6121,5253],{"class":673},[186,6123,254],{"class":196},[186,6125,257],{"class":243},[186,6127,260],{"class":196},[186,6129,6130,6132,6134,6136,6138,6140,6142,6145],{"class":188,"line":220},[186,6131,2521],{"class":284},[186,6133,300],{"class":196},[186,6135,2526],{"class":673},[186,6137,605],{"class":196},[186,6139,535],{"class":673},[186,6141,1959],{"class":196},[186,6143,6144],{"class":673}," undefined",[186,6146,627],{"class":196},[186,6148,6149,6151,6153,6155,6157,6159,6161,6163],{"class":188,"line":227},[186,6150,2543],{"class":284},[186,6152,300],{"class":196},[186,6154,2548],{"class":673},[186,6156,605],{"class":196},[186,6158,2553],{"class":673},[186,6160,605],{"class":196},[186,6162,2467],{"class":673},[186,6164,6165],{"class":196},">>\n",[186,6167,6168,6170,6172,6174,6176,6178,6180,6182],{"class":188,"line":263},[186,6169,2568],{"class":284},[186,6171,300],{"class":196},[186,6173,2573],{"class":196},[186,6175,257],{"class":243},[186,6177,2526],{"class":673},[186,6179,605],{"class":196},[186,6181,2895],{"class":673},[186,6183,627],{"class":196},[186,6185,6186],{"class":188,"line":270},[186,6187,759],{"class":196},[6189,6190,6191],"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 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 .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}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":182,"searchDepth":220,"depth":220,"links":6193},[6194,6199,6204,6209],{"id":150,"depth":220,"text":151,"children":6195},[6196,6197,6198],{"id":463,"depth":227,"text":158},{"id":587,"depth":227,"text":162},{"id":916,"depth":227,"text":917},{"id":1593,"depth":220,"text":1594,"children":6200},[6201,6202,6203],{"id":1600,"depth":227,"text":1603},{"id":1881,"depth":227,"text":1884},{"id":2607,"depth":227,"text":917},{"id":4437,"depth":220,"text":4438,"children":6205},[6206,6207,6208],{"id":4452,"depth":227,"text":4455},{"id":4665,"depth":227,"text":4668},{"id":5228,"depth":227,"text":5229},{"id":5785,"depth":220,"text":5786,"children":6210},[6211,6212,6213,6214],{"id":5789,"depth":227,"text":535},{"id":5918,"depth":227,"text":4661},{"id":6067,"depth":227,"text":6014},{"id":6103,"depth":227,"text":6106},"Learn how to upload files in your Nuxt application using validation, simple uploads, and multipart uploads for large files.","md",null,{},{"title":65},{"title":139,"description":6215},"u7RVX0_zDLTxT7tPKtrXizMU40lSDVTx8J64yW9BfrQ",[6223,6225],{"title":40,"path":60,"stem":61,"description":6224,"children":-1},"Setup Blob Storage in your Nuxt application to store assets like images, videos, documents. Compatible with AWS S3, Cloudflare R2, Vercel Blob and more.",{"title":69,"path":70,"stem":71,"description":6226,"children":-1},"Learn how to use the @nuxthub/blob SDK to list, read, store, and delete files in your Blob Storage.",1775064432130]