@junobuild/storage
Version:
A library for interfacing with Juno's Storage features.
3 lines (2 loc) • 2.51 kB
JavaScript
import{assertNonNullish as B,toNullable as u}from"@dfinity/utils";import{isBrowser as A}from"@junobuild/utils";var K=async({asset:{data:o,headers:s,...t},actor:a,progress:e})=>{let{init_asset_upload:n,upload_asset_chunk:d,commit_asset_upload:i}=a,{batch_id:l}=await n(m(t));e?.onInitiatedBatch();let{chunkIds:p}=await r({data:o,uploadFn:d,batchId:l});e?.onUploadedFileChunks(t.fullPath),await U({commitFn:i,batchId:l,data:o,headers:s,chunkIds:p}),e?.onCommittedBatch()},S=async({asset:{data:o,headers:s,...t},proposalId:a,actor:e,progress:n})=>{let{init_proposal_asset_upload:d,upload_proposal_asset_chunk:i,commit_proposal_asset_upload:l}=e;n?.onInitiatedBatch();let{batch_id:p}=await d(m(t),a),{chunkIds:c}=await r({data:o,uploadFn:i,batchId:p});n?.onUploadedFileChunks(t.fullPath),await U({commitFn:l,batchId:p,data:o,headers:s,chunkIds:c}),n?.onCommittedBatch()},v=async({assets:o,proposalId:s,actor:t,progress:a})=>{let{init_proposal_many_assets_upload:e,upload_proposal_asset_chunk:n,commit_proposal_many_assets_upload:d}=t,i=await e(o.map(m),s);a?.onInitiatedBatch();let l=async({fullPath:c,data:h,headers:P})=>{let C=i.find(([I])=>I===c);B(C);let[g,b]=C,{batch_id:k}=b,{chunkIds:f}=await r({data:h,uploadFn:n,batchId:k});return a?.onUploadedFileChunks(c),{batchId:k,headers:P,chunkIds:f,data:h}},p=await Promise.all(o.map(l));await d(p.map(y)),a?.onCommittedBatch()},m=({filename:o,collection:s,token:t,fullPath:a,encoding:e,description:n})=>({collection:s,full_path:a,name:o,token:u(t),encoding_type:u(e),description:u(n)}),y=({batchId:o,chunkIds:s,headers:t,data:a})=>{let e=t.find(([n,d])=>n.toLowerCase()==="content-type")===void 0&&a.type!==void 0&&a.type!==""?[["Content-Type",a.type]]:void 0;return{batch_id:o,chunk_ids:s.map(({chunk_id:n})=>n),headers:[...t,...e??[]]}},U=async({commitFn:o,...s})=>{let t=y(s);await o(t)},r=async({data:o,uploadFn:s,batchId:t})=>{let a=[],e=A()?new Blob([await o.arrayBuffer()]):o,n=0n;for(let i=0;i<e.size;i+=19e5){let l=e.slice(i,i+19e5);a.push({batchId:t,chunk:l,uploadFn:s,orderId:n}),n++}let d=[];for await(let i of w({uploadChunks:a}))d=[...d,...i];return{chunkIds:d}};async function*w({uploadChunks:o,limit:s=12}){for(let t=0;t<o.length;t=t+s){let a=o.slice(t,t+s);yield await Promise.all(a.map(n=>F(n)))}}var F=async({batchId:o,chunk:s,uploadFn:t,orderId:a})=>t({batch_id:o,content:new Uint8Array(await s.arrayBuffer()),order_id:u(a)});export{K as uploadAsset,S as uploadAssetWithProposal,v as uploadAssetsWithProposal};
//# sourceMappingURL=index.js.map