personal-ui-framework 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";var t,e,i,s,a,r,l,n,o,d,h,u,c,_,f=require("../Formater-jO6LQ_F9.cjs.js"),v=require("../tslib.es6-DWtgJshR.cjs.js"),P=require("../http/index.cjs.js");e=new WeakMap,i=new WeakMap,s=new WeakMap,a=new WeakMap,r=new WeakMap,l=new WeakMap,n=new WeakMap,t=new WeakSet,o=function(t,e){let i=[];const s=Math.ceil(t.size/e);for(let a=0;a<s;a++)i.push({fileName:t.name,chunkIndex:a,start:a*e,end:a*e+e});return{totalChunks:s,chunkProps:i}},d=function(t,e){return f.Formater.array.splitIntoChunks(t,e)},h=function(t,e){return v.__awaiter(this,arguments,void 0,(function*(t,e,i=void 0,a){if(!t)throw new Error("File should not be null !");for(let i=0;i<e.length;!v.__classPrivateFieldGet(this,s,"f")&&i++){const r=e[i];v.__classPrivateFieldGet(this,s,"f")?yield p(1e3):(yield Promise.all(r.map((e=>v.__awaiter(this,void 0,void 0,(function*(){const i=new FileReader;return yield new Promise(((s,r)=>{const l=t.slice(e.start,e.end);i.onload=t=>v.__awaiter(this,void 0,void 0,(function*(){const i=yield a(t,l,e);s(i)})),i.onerror=t=>r(t),i.readAsDataURL(l)}))}))))),yield this.getStatus())}}))},u=function(e,i,s){return v.__awaiter(this,arguments,void 0,(function*(e,i,s,a=void 0){if(!e)throw new Error("File should not be null !");yield v.__classPrivateFieldGet(this,t,"m",h).call(this,e,s,a,((s,a,r)=>v.__awaiter(this,void 0,void 0,(function*(){return yield v.__classPrivateFieldGet(this,t,"m",_).call(this,{fileName:r.fileName,fileSize:e.size,fileType:e.type,chunkIndex:r.chunkIndex,totalChunks:i,chunk:s.target.result})}))))}))},c=function(t){return v.__awaiter(this,void 0,void 0,(function*(){if(t.length>0){const i=yield P.http.request({url:`${v.__classPrivateFieldGet(this,r,"f")}/init`,method:"POST",headers:{"Client-Id":v.__classPrivateFieldGet(this,e,"f")},data:t});if(i&&200===i.status)return i.data;throw new Error("Unable to init file meta data !")}}))},_=function(t){return v.__awaiter(this,void 0,void 0,(function*(){const s=yield P.http.request({url:v.__classPrivateFieldGet(this,a,"f"),method:"POST",headers:{"Client-Id":v.__classPrivateFieldGet(this,e,"f"),"Dir-Id":v.__classPrivateFieldGet(this,i,"f"),"Chunk-Index":t.chunkIndex.toString(),"Total-Chunks":t.totalChunks.toString(),"File-Name":t.fileName,"File-Size":t.fileSize.toString(),"File-Type":t.fileType},data:t.chunk});if(s&&200===s.status)return s;throw new Error("Unable to upload chunk !")}))};const p=t=>new Promise((e=>setTimeout(e,t)));exports.ColorUtil=f.ColorUtil,exports.Formater=f.Formater,exports.PubSub=f.PubSub,exports.SharedPreference=f.SharedPreference,exports.generateUUID=f.generateUUID,exports.FileUploadByChunk=class{constructor({clientId:o,dirId:d,uploadUrl:h,actionUrl:u,chunkSize:c,maxConcurrentUpload:_}){t.add(this),e.set(this,void 0),i.set(this,void 0),s.set(this,!1),a.set(this,void 0),r.set(this,void 0),l.set(this,void 0),n.set(this,void 0),this.onStatus=t=>{},this.addEventListener=(t,e)=>(window.addEventListener(`fileupload/${t}`,(t=>e(t.detail))),{destroy:()=>{window.removeEventListener(`fileupload/${t}`,e)}}),v.__classPrivateFieldSet(this,e,o,"f"),v.__classPrivateFieldSet(this,i,d,"f"),v.__classPrivateFieldSet(this,a,h,"f"),v.__classPrivateFieldSet(this,r,u,"f"),v.__classPrivateFieldSet(this,l,c||1048576,"f"),v.__classPrivateFieldSet(this,n,_||5,"f")}uploadFiles(e){return v.__awaiter(this,void 0,void 0,(function*(){if(e.length>0){const i=e.map((t=>encodeURIComponent(t.name)));yield v.__classPrivateFieldGet(this,t,"m",c).call(this,i),yield this.getStatus();for(let i of e){const{totalChunks:e,chunkProps:s}=v.__classPrivateFieldGet(this,t,"m",o).call(this,i,v.__classPrivateFieldGet(this,l,"f")),a=v.__classPrivateFieldGet(this,t,"m",d).call(this,s,v.__classPrivateFieldGet(this,n,"f"));yield v.__classPrivateFieldGet(this,t,"m",u).call(this,i,e,a,void 0)}}}))}getStatus(){return v.__awaiter(this,void 0,void 0,(function*(){const t=yield P.http.request({url:`${v.__classPrivateFieldGet(this,r,"f")}/status`,method:"POST",headers:{"Client-Id":v.__classPrivateFieldGet(this,e,"f")}});if(t&&200===t.status)return this.onStatus(t.data),window.dispatchEvent(new CustomEvent("fileupload/status",{detail:t.data})),t;throw new Error("Unable to fetch fileupload status !")}))}pause(){return v.__classPrivateFieldSet(this,s,!0,"f"),v.__classPrivateFieldGet(this,s,"f")}resume(){return v.__classPrivateFieldSet(this,s,!1,"f"),v.__classPrivateFieldGet(this,s,"f")}done(t){return v.__awaiter(this,void 0,void 0,(function*(){const i=yield P.http.request({url:`${v.__classPrivateFieldGet(this,r,"f")}/done`,method:"POST",headers:{"Client-Id":v.__classPrivateFieldGet(this,e,"f")},data:{id:t}});if(i&&200===i.status)return yield this.getStatus(),!0;throw new Error("Unable to fetch fileupload status !")}))}};
1
+ "use strict";var e,t,i,s,a,l,r,n,o,d,c,h,_,u,v=require("../Formater-jO6LQ_F9.cjs.js"),f=require("../tslib.es6-DWtgJshR.cjs.js"),P=require("../http/index.cjs.js");t=new WeakMap,i=new WeakMap,s=new WeakMap,a=new WeakMap,l=new WeakMap,r=new WeakMap,n=new WeakMap,e=new WeakSet,o=function(e,t){let i=[];const s=Math.ceil(e.size/t);for(let a=0;a<s;a++)i.push({fileName:e.name,chunkIndex:a,start:a*t,end:a*t+t});return{totalChunks:s,chunkProps:i}},d=function(e,t){return v.Formater.array.splitIntoChunks(e,t)},c=function(e,t){return f.__awaiter(this,arguments,void 0,(function*(e,t,i=void 0,a){if(!e)throw new Error("File should not be null !");for(let i=0;i<t.length;!f.__classPrivateFieldGet(this,s,"f")&&i++){const l=t[i];f.__classPrivateFieldGet(this,s,"f")?yield F(1e3):(yield Promise.all(l.map((t=>f.__awaiter(this,void 0,void 0,(function*(){const i=new FileReader;return yield new Promise(((s,l)=>{const r=e.slice(t.start,t.end);i.onload=e=>f.__awaiter(this,void 0,void 0,(function*(){const i=yield a(e,r,t);s(i)})),i.onerror=e=>l(e),i.readAsDataURL(r)}))}))))),yield this.getStatus())}}))},h=function(t,i,s){return f.__awaiter(this,arguments,void 0,(function*(t,i,s,a=void 0){if(!t)throw new Error("File should not be null !");yield f.__classPrivateFieldGet(this,e,"m",c).call(this,t,s,a,((s,a,l)=>f.__awaiter(this,void 0,void 0,(function*(){return yield f.__classPrivateFieldGet(this,e,"m",u).call(this,{fileName:l.fileName,fileSize:t.size,fileType:t.type,chunkIndex:l.chunkIndex,totalChunks:i,chunk:s.target.result})}))))}))},_=function(e){return f.__awaiter(this,void 0,void 0,(function*(){if(e.length>0){const i=yield P.http.request({url:`${f.__classPrivateFieldGet(this,l,"f")}/init`,method:"POST",headers:{"Client-Id":f.__classPrivateFieldGet(this,t,"f")},data:e});if(i&&200===i.status)return i.data;throw new Error("Unable to init file meta data !")}}))},u=function(e){return f.__awaiter(this,void 0,void 0,(function*(){const s=yield P.http.request({url:f.__classPrivateFieldGet(this,a,"f"),method:"POST",headers:{"Client-Id":f.__classPrivateFieldGet(this,t,"f"),"Dir-Id":f.__classPrivateFieldGet(this,i,"f"),"Chunk-Index":e.chunkIndex.toString(),"Total-Chunks":e.totalChunks.toString(),"File-Name":e.fileName,"File-Size":e.fileSize.toString(),"File-Type":e.fileType},data:e.chunk});if(s&&200===s.status)return s;throw new Error("Unable to upload chunk !")}))};const F=e=>new Promise((t=>setTimeout(t,e)));var p,w,m,G,S,k,y,b,C,g;function I(){return f.__awaiter(this,arguments,void 0,(function*(e=1e3){return yield new Promise(((t,i)=>{setTimeout((()=>{t(e)}),e)}))}))}w=new WeakMap,m=new WeakMap,G=new WeakMap,S=new WeakMap,k=new WeakMap,y=new WeakMap,p=new WeakSet,b=function e(){return f.__classPrivateFieldSet(this,k,new WebSocket(f.__classPrivateFieldGet(this,w,"f")),"f"),f.__classPrivateFieldGet(this,k,"f").onopen=e=>{this.onConnect(e),f.__classPrivateFieldGet(this,S,"f")&&f.__classPrivateFieldGet(this,p,"m",C).call(this)},f.__classPrivateFieldGet(this,k,"f").onclose=t=>f.__awaiter(this,void 0,void 0,(function*(){f.__classPrivateFieldGet(this,S,"f")&&(yield I(3e3),f.__classPrivateFieldGet(this,p,"m",e).call(this)),this.onDisconnect(t)})),f.__classPrivateFieldGet(this,k,"f").onmessage=e=>{var t;(null===(t=f.__classPrivateFieldGet(this,k,"f"))||void 0===t?void 0:t.readyState)===WebSocket.OPEN&&function(e,t){const i=new FileReader;i.onload=()=>{const e=JSON.parse(i.result);t({event:e.event,topic:e.topic,data:e.data})},i.readAsText(e)}(e.data,(e=>{switch(e.event){case"request-auth":const t={topic:void 0,event:"auth",data:{username:f.__classPrivateFieldGet(this,m,"f"),password:f.__classPrivateFieldGet(this,G,"f")}};f.__classPrivateFieldGet(this,p,"m",g).call(this,t);break;case"message":this.onMessage(e.data,e.topic,e.event)}}))},this},C=function(){for(let e of f.__classPrivateFieldGet(this,y,"f"))this.subscribe(e)},g=function e(t){return f.__awaiter(this,void 0,void 0,(function*(){var i,s;if(null===(i=f.__classPrivateFieldGet(this,k,"f"))||void 0===i?void 0:i.CONNECTING)return yield I(),void f.__classPrivateFieldGet(this,p,"m",e).call(this,t);const a=(new TextEncoder).encode(JSON.stringify(t));null===(s=f.__classPrivateFieldGet(this,k,"f"))||void 0===s||s.send(a)}))},exports.ColorUtil=v.ColorUtil,exports.Formater=v.Formater,exports.PubSub=v.PubSub,exports.SharedPreference=v.SharedPreference,exports.generateUUID=v.generateUUID,exports.FileUploadByChunk=class{constructor({clientId:o,dirId:d,uploadUrl:c,actionUrl:h,chunkSize:_,maxConcurrentUpload:u}){e.add(this),t.set(this,void 0),i.set(this,void 0),s.set(this,!1),a.set(this,void 0),l.set(this,void 0),r.set(this,void 0),n.set(this,void 0),this.onStatus=e=>{},this.addEventListener=(e,t)=>(window.addEventListener(`fileupload/${e}`,(e=>t(e.detail))),{destroy:()=>{window.removeEventListener(`fileupload/${e}`,t)}}),f.__classPrivateFieldSet(this,t,o,"f"),f.__classPrivateFieldSet(this,i,d,"f"),f.__classPrivateFieldSet(this,a,c,"f"),f.__classPrivateFieldSet(this,l,h,"f"),f.__classPrivateFieldSet(this,r,_||1048576,"f"),f.__classPrivateFieldSet(this,n,u||5,"f")}uploadFiles(t){return f.__awaiter(this,void 0,void 0,(function*(){if(t.length>0){const i=t.map((e=>encodeURIComponent(e.name)));yield f.__classPrivateFieldGet(this,e,"m",_).call(this,i),yield this.getStatus();for(let i of t){const{totalChunks:t,chunkProps:s}=f.__classPrivateFieldGet(this,e,"m",o).call(this,i,f.__classPrivateFieldGet(this,r,"f")),a=f.__classPrivateFieldGet(this,e,"m",d).call(this,s,f.__classPrivateFieldGet(this,n,"f"));yield f.__classPrivateFieldGet(this,e,"m",h).call(this,i,t,a,void 0)}}}))}getStatus(){return f.__awaiter(this,void 0,void 0,(function*(){const e=yield P.http.request({url:`${f.__classPrivateFieldGet(this,l,"f")}/status`,method:"POST",headers:{"Client-Id":f.__classPrivateFieldGet(this,t,"f")}});if(e&&200===e.status)return this.onStatus(e.data),window.dispatchEvent(new CustomEvent("fileupload/status",{detail:e.data})),e;throw new Error("Unable to fetch fileupload status !")}))}pause(){return f.__classPrivateFieldSet(this,s,!0,"f"),f.__classPrivateFieldGet(this,s,"f")}resume(){return f.__classPrivateFieldSet(this,s,!1,"f"),f.__classPrivateFieldGet(this,s,"f")}done(e){return f.__awaiter(this,void 0,void 0,(function*(){const i=yield P.http.request({url:`${f.__classPrivateFieldGet(this,l,"f")}/done`,method:"POST",headers:{"Client-Id":f.__classPrivateFieldGet(this,t,"f")},data:{id:e}});if(i&&200===i.status)return yield this.getStatus(),!0;throw new Error("Unable to fetch fileupload status !")}))}},exports.WebSocketClient=class{constructor(e){var t;p.add(this),w.set(this,""),m.set(this,""),G.set(this,""),S.set(this,!1),k.set(this,void 0),y.set(this,[]),this.onConnect=e=>{},this.onDisconnect=e=>{},this.onMessage=(e,t,i)=>{},f.__classPrivateFieldSet(this,w,e.url,"f"),f.__classPrivateFieldSet(this,m,e.username,"f"),f.__classPrivateFieldSet(this,G,e.password,"f"),f.__classPrivateFieldSet(this,S,null!==(t=e.autoReconnect)&&void 0!==t&&t,"f"),f.__classPrivateFieldGet(this,p,"m",b).call(this)}static getInstance(){return this}subscribe(e){const t={topic:e,event:"subscribe",data:void 0};f.__classPrivateFieldGet(this,p,"m",g).call(this,t),f.__classPrivateFieldGet(this,y,"f").push(e),f.__classPrivateFieldSet(this,y,[...new Set(f.__classPrivateFieldGet(this,y,"f"))],"f")}unSubscribe(e){const t={topic:e,event:"un-subscribe",data:void 0};f.__classPrivateFieldGet(this,p,"m",g).call(this,t),f.__classPrivateFieldSet(this,y,f.__classPrivateFieldGet(this,y,"f").filter((t=>t!==e)),"f")}publish(e,t){const{data:i,event:s}=t,a={topic:e,event:null!=s?s:"message",data:i};f.__classPrivateFieldGet(this,p,"m",g).call(this,a)}disconnect(){var e;null===(e=f.__classPrivateFieldGet(this,k,"f"))||void 0===e||e.close()}};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/util/FileUploadByChunk.ts"],"sourcesContent":["// import axios, { type AxiosResponse } from \"axios\";\n// import httpRequest from \"../http\";\nimport http from \"../http/index\";\nimport Formater from \"./Formater\";\n\ninterface ChunkHelperOptions {\n clientId: string;\n uploadUrl: string;\n actionUrl: string;\n dirId: string;\n chunkSize?: number;\n maxConcurrentUpload?: number;\n}\n\nclass FileUploadByChunk {\n #clientId: string;\n #dirId: string;\n #isPaused: boolean = false;\n #uploadUrl: string;\n #actionUrl: string;\n #chunkSize: number;\n #maxConcurrentUpload: number;\n\n constructor({ clientId, dirId, uploadUrl, actionUrl, chunkSize, maxConcurrentUpload }: ChunkHelperOptions) {\n this.#clientId = clientId;\n this.#dirId = dirId;\n this.#uploadUrl = uploadUrl;\n this.#actionUrl = actionUrl;\n this.#chunkSize = chunkSize || (1024 * 1024) * 1;\n this.#maxConcurrentUpload = maxConcurrentUpload || 5;\n }\n\n onStatus = ((data?: any): void => { })\n\n addEventListener = (event: \"status\", callback: (data: any) => void) => {\n window.addEventListener(`fileupload/${event}`, (e: any) => callback(e.detail));\n\n return {\n destroy: () => {\n window.removeEventListener(`fileupload/${event}`, callback);\n }\n }\n }\n\n async uploadFiles(files: Array<File>) {\n if (files.length > 0) {\n const fileNames = files.map((f) => encodeURIComponent(f.name));\n await this.#init(fileNames);\n await this.getStatus();\n\n for (let _file of files!) {\n const { totalChunks, chunkProps } = this.#createChunks(_file, this.#chunkSize);\n const chunkBatch = this.#splitChunksAsBatch(chunkProps, this.#maxConcurrentUpload);\n await this.#readFileFromChunkAndUpload(_file, totalChunks, chunkBatch, undefined);\n }\n }\n }\n\n #createChunks(file: File, maxChunkSize: number): ChunkModel {\n let chunkProps: Array<ChunkProps> = [];\n const _totalChunk = Math.ceil(file.size / maxChunkSize);\n for (let chunkIndex = 0; chunkIndex < _totalChunk; chunkIndex++) {\n // if (!uploadedChunks.includes(chunkIndex)) {\n chunkProps.push({\n fileName: file.name,\n chunkIndex,\n start: chunkIndex * maxChunkSize,\n // end: Math.min((i + 1) * maxChunkSize, file.size)\n end: (chunkIndex * maxChunkSize) + maxChunkSize\n });\n // }\n }\n return {\n totalChunks: _totalChunk,\n chunkProps: chunkProps,\n };\n }\n\n #splitChunksAsBatch(data: Array<any>, splitBy: number): Array<Array<ChunkProps>> {\n // let _batchArray: Array<Array<ChunkProps>> = [];\n // for (let i = 0; i < data.length; i += splitBy) {\n // const _batch = data.slice(i, i + splitBy);\n // _batchArray.push(_batch);\n // }\n // return _batchArray;\n return Formater.array.splitIntoChunks(data, splitBy);\n }\n\n\n async #readFileFromChunk(\n file: File | null,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n onLoad: (event: ProgressEvent<FileReader>, blob: Blob, metaData: ChunkProps) => Promise<any>,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n\n for (let i = 0; i < chunkBatch.length; !this.#isPaused && i++) {\n const batch = chunkBatch[i];\n\n if (this.#isPaused) {\n await simulateDelay(1000);\n continue;\n }\n\n await Promise.all(\n batch.map(async (props) => {\n const reader = new FileReader();\n return await new Promise((resolve, reject) => {\n const blob = file.slice(props.start, props.end);\n reader.onload = async (e) => {\n const _res = await onLoad(e, blob, props);\n resolve(_res);\n };\n reader.onerror = (err) => reject(err)\n reader.readAsDataURL(blob);\n })\n })\n );\n await this.getStatus()\n // .then(res => {\n // if (res && res.status === 200 && setStatus) {\n // setStatus(res.data);\n // this.onStatus(res.data);\n // }\n // });\n }\n }\n\n async #readFileFromChunkAndUpload(\n file: File | null,\n totalChunks: number,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n await this.#readFileFromChunk(\n file,\n chunkBatch,\n setStatus,\n async (event, _, metaData) => {\n return await this.#upload({\n fileName: metaData.fileName,\n fileSize: file.size,\n fileType: file.type,\n chunkIndex: metaData.chunkIndex,\n totalChunks: totalChunks,\n chunk: event.target!.result,\n });\n },\n )\n }\n\n async #init(fileNames: string[]) {\n // const res = await axios.request({\n // url: `${this.#actionUrl}/init`,\n // method: \"POST\",\n // data: fileNames,\n // headers: {\n // \"Client-Id\": this.#clientId,\n // }\n // });\n if (fileNames.length > 0) {\n const res = await http.request({\n url: `${this.#actionUrl}/init`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: fileNames,\n });\n\n if (res && res.status === 200) return res.data;\n else throw new Error(\"Unable to init file meta data !\");\n }\n }\n\n async #upload(data: ChunkUploadProps) {\n const res = await http.request({\n url: this.#uploadUrl,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n \"Dir-Id\": this.#dirId,\n \"Chunk-Index\": data.chunkIndex.toString(),\n \"Total-Chunks\": data.totalChunks.toString(),\n \"File-Name\": data.fileName,\n \"File-Size\": data.fileSize.toString(),\n \"File-Type\": data.fileType,\n },\n data: data.chunk,\n })\n if (res && res.status === 200) return res;\n else throw new Error(\"Unable to upload chunk !\");\n }\n\n async getStatus() {\n const res = await http.request({\n url: `${this.#actionUrl}/status`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n }\n });\n if (res && res.status === 200) {\n this.onStatus(res.data);\n window.dispatchEvent(new CustomEvent(\"fileupload/status\", { detail: res.data }));\n return res;\n }\n else throw new Error(\"Unable to fetch fileupload status !\");\n }\n\n pause() {\n this.#isPaused = true;\n return this.#isPaused;\n }\n\n resume() {\n this.#isPaused = false;\n return this.#isPaused;\n }\n\n async done(id: string) {\n const res = await http.request({\n url: `${this.#actionUrl}/done`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: { id }\n });\n if (res && res.status === 200) {\n await this.getStatus();\n return true;\n }\n else\n throw new Error(\"Unable to fetch fileupload status !\");\n }\n}\n\nconst simulateDelay = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n\nexport { FileUploadByChunk };\n\ninterface ChunkModel {\n totalChunks: number;\n chunkProps: Array<ChunkProps>;\n}\n\ninterface ChunkProps {\n fileName: string;\n chunkIndex: number;\n start: number;\n end: number;\n}\n\ninterface ChunkUploadProps {\n chunk: string | ArrayBuffer | null | undefined;\n chunkIndex: number;\n totalChunks: number;\n fileName: string;\n fileSize: number;\n fileType: string;\n}"],"names":["_FileUploadByChunk_clientId","WeakMap","_FileUploadByChunk_dirId","_FileUploadByChunk_isPaused","_FileUploadByChunk_uploadUrl","_FileUploadByChunk_actionUrl","_FileUploadByChunk_chunkSize","_FileUploadByChunk_maxConcurrentUpload","_FileUploadByChunk_instances","WeakSet","_FileUploadByChunk_createChunks","file","maxChunkSize","chunkProps","_totalChunk","Math","ceil","size","chunkIndex","push","fileName","name","start","end","totalChunks","_FileUploadByChunk_splitChunksAsBatch","data","splitBy","Formater","array","splitIntoChunks","_FileUploadByChunk_readFileFromChunk","file_1","chunkBatch_1","__awaiter","this","arguments","chunkBatch","setStatus","undefined","onLoad","Error","i","length","__classPrivateFieldGet","batch","simulateDelay","Promise","all","map","props","reader","FileReader","resolve","reject","blob","slice","onload","e","_res","onerror","err","readAsDataURL","getStatus","event","_","metaData","_FileUploadByChunk_upload","call","fileSize","fileType","type","chunk","target","result","fileNames","res","http","request","url","method","headers","status","toString","ms","setTimeout","constructor","clientId","dirId","uploadUrl","actionUrl","chunkSize","maxConcurrentUpload","set","onStatus","addEventListener","callback","window","detail","destroy","removeEventListener","__classPrivateFieldSet","uploadFiles","files","f","encodeURIComponent","_FileUploadByChunk_init","_file","_FileUploadByChunk_readFileFromChunkAndUpload","dispatchEvent","CustomEvent","pause","resume","done","id"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/util/FileUploadByChunk.ts","../../src/util/WebSocket.client.ts"],"sourcesContent":["// import axios, { type AxiosResponse } from \"axios\";\n// import httpRequest from \"../http\";\nimport http from \"../http/index\";\nimport Formater from \"./Formater\";\n\ninterface ChunkHelperOptions {\n clientId: string;\n uploadUrl: string;\n actionUrl: string;\n dirId: string;\n chunkSize?: number;\n maxConcurrentUpload?: number;\n}\n\nclass FileUploadByChunk {\n #clientId: string;\n #dirId: string;\n #isPaused: boolean = false;\n #uploadUrl: string;\n #actionUrl: string;\n #chunkSize: number;\n #maxConcurrentUpload: number;\n\n constructor({ clientId, dirId, uploadUrl, actionUrl, chunkSize, maxConcurrentUpload }: ChunkHelperOptions) {\n this.#clientId = clientId;\n this.#dirId = dirId;\n this.#uploadUrl = uploadUrl;\n this.#actionUrl = actionUrl;\n this.#chunkSize = chunkSize || (1024 * 1024) * 1;\n this.#maxConcurrentUpload = maxConcurrentUpload || 5;\n }\n\n onStatus = ((data?: any): void => { })\n\n addEventListener = (event: \"status\", callback: (data: any) => void) => {\n window.addEventListener(`fileupload/${event}`, (e: any) => callback(e.detail));\n\n return {\n destroy: () => {\n window.removeEventListener(`fileupload/${event}`, callback);\n }\n }\n }\n\n async uploadFiles(files: Array<File>) {\n if (files.length > 0) {\n const fileNames = files.map((f) => encodeURIComponent(f.name));\n await this.#init(fileNames);\n await this.getStatus();\n\n for (let _file of files!) {\n const { totalChunks, chunkProps } = this.#createChunks(_file, this.#chunkSize);\n const chunkBatch = this.#splitChunksAsBatch(chunkProps, this.#maxConcurrentUpload);\n await this.#readFileFromChunkAndUpload(_file, totalChunks, chunkBatch, undefined);\n }\n }\n }\n\n #createChunks(file: File, maxChunkSize: number): ChunkModel {\n let chunkProps: Array<ChunkProps> = [];\n const _totalChunk = Math.ceil(file.size / maxChunkSize);\n for (let chunkIndex = 0; chunkIndex < _totalChunk; chunkIndex++) {\n // if (!uploadedChunks.includes(chunkIndex)) {\n chunkProps.push({\n fileName: file.name,\n chunkIndex,\n start: chunkIndex * maxChunkSize,\n // end: Math.min((i + 1) * maxChunkSize, file.size)\n end: (chunkIndex * maxChunkSize) + maxChunkSize\n });\n // }\n }\n return {\n totalChunks: _totalChunk,\n chunkProps: chunkProps,\n };\n }\n\n #splitChunksAsBatch(data: Array<any>, splitBy: number): Array<Array<ChunkProps>> {\n // let _batchArray: Array<Array<ChunkProps>> = [];\n // for (let i = 0; i < data.length; i += splitBy) {\n // const _batch = data.slice(i, i + splitBy);\n // _batchArray.push(_batch);\n // }\n // return _batchArray;\n return Formater.array.splitIntoChunks(data, splitBy);\n }\n\n\n async #readFileFromChunk(\n file: File | null,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n onLoad: (event: ProgressEvent<FileReader>, blob: Blob, metaData: ChunkProps) => Promise<any>,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n\n for (let i = 0; i < chunkBatch.length; !this.#isPaused && i++) {\n const batch = chunkBatch[i];\n\n if (this.#isPaused) {\n await simulateDelay(1000);\n continue;\n }\n\n await Promise.all(\n batch.map(async (props) => {\n const reader = new FileReader();\n return await new Promise((resolve, reject) => {\n const blob = file.slice(props.start, props.end);\n reader.onload = async (e) => {\n const _res = await onLoad(e, blob, props);\n resolve(_res);\n };\n reader.onerror = (err) => reject(err)\n reader.readAsDataURL(blob);\n })\n })\n );\n await this.getStatus()\n // .then(res => {\n // if (res && res.status === 200 && setStatus) {\n // setStatus(res.data);\n // this.onStatus(res.data);\n // }\n // });\n }\n }\n\n async #readFileFromChunkAndUpload(\n file: File | null,\n totalChunks: number,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n await this.#readFileFromChunk(\n file,\n chunkBatch,\n setStatus,\n async (event, _, metaData) => {\n return await this.#upload({\n fileName: metaData.fileName,\n fileSize: file.size,\n fileType: file.type,\n chunkIndex: metaData.chunkIndex,\n totalChunks: totalChunks,\n chunk: event.target!.result,\n });\n },\n )\n }\n\n async #init(fileNames: string[]) {\n // const res = await axios.request({\n // url: `${this.#actionUrl}/init`,\n // method: \"POST\",\n // data: fileNames,\n // headers: {\n // \"Client-Id\": this.#clientId,\n // }\n // });\n if (fileNames.length > 0) {\n const res = await http.request({\n url: `${this.#actionUrl}/init`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: fileNames,\n });\n\n if (res && res.status === 200) return res.data;\n else throw new Error(\"Unable to init file meta data !\");\n }\n }\n\n async #upload(data: ChunkUploadProps) {\n const res = await http.request({\n url: this.#uploadUrl,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n \"Dir-Id\": this.#dirId,\n \"Chunk-Index\": data.chunkIndex.toString(),\n \"Total-Chunks\": data.totalChunks.toString(),\n \"File-Name\": data.fileName,\n \"File-Size\": data.fileSize.toString(),\n \"File-Type\": data.fileType,\n },\n data: data.chunk,\n })\n if (res && res.status === 200) return res;\n else throw new Error(\"Unable to upload chunk !\");\n }\n\n async getStatus() {\n const res = await http.request({\n url: `${this.#actionUrl}/status`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n }\n });\n if (res && res.status === 200) {\n this.onStatus(res.data);\n window.dispatchEvent(new CustomEvent(\"fileupload/status\", { detail: res.data }));\n return res;\n }\n else throw new Error(\"Unable to fetch fileupload status !\");\n }\n\n pause() {\n this.#isPaused = true;\n return this.#isPaused;\n }\n\n resume() {\n this.#isPaused = false;\n return this.#isPaused;\n }\n\n async done(id: string) {\n const res = await http.request({\n url: `${this.#actionUrl}/done`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: { id }\n });\n if (res && res.status === 200) {\n await this.getStatus();\n return true;\n }\n else\n throw new Error(\"Unable to fetch fileupload status !\");\n }\n}\n\nconst simulateDelay = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n\nexport { FileUploadByChunk };\n\ninterface ChunkModel {\n totalChunks: number;\n chunkProps: Array<ChunkProps>;\n}\n\ninterface ChunkProps {\n fileName: string;\n chunkIndex: number;\n start: number;\n end: number;\n}\n\ninterface ChunkUploadProps {\n chunk: string | ArrayBuffer | null | undefined;\n chunkIndex: number;\n totalChunks: number;\n fileName: string;\n fileSize: number;\n fileType: string;\n}","class WebSocketClient {\n #url: string = \"\";\n #username: string = \"\";\n #password: string = \"\";\n #autoReconnect: boolean = false;\n #wss?: WebSocket = undefined;\n #subscribedTopics: Array<string> = [];\n\n constructor(props: ConnectionProps) {\n this.#url = props.url;\n this.#username = props.username;\n this.#password = props.password;\n this.#autoReconnect = props.autoReconnect ?? false;\n\n this.#_init();\n }\n\n static getInstance(): typeof WebSocketClient {\n return this;\n }\n\n #_init() {\n this.#wss = new WebSocket(this.#url);\n\n this.#wss.onopen = (e: any) => {\n this.onConnect(e);\n if (this.#autoReconnect)\n this.#reSubscribe();\n }\n\n this.#wss.onclose = async (e: any) => {\n if (this.#autoReconnect) {\n await sleep(3000);\n this.#_init();\n }\n this.onDisconnect(e);\n };\n\n this.#wss.onmessage = (m: MessageEvent<any>) => {\n if (this.#wss?.readyState !== WebSocket.OPEN) return;\n\n binaryDecoder(m.data, (payload: SocketReqRes) => {\n switch (payload.event) {\n case \"request-auth\":\n const data: SocketReqRes = {\n topic: undefined,\n event: \"auth\",\n data: {\n username: this.#username,\n password: this.#password,\n }\n }\n this.#_sent(data);\n break;\n\n case \"message\":\n this.onMessage(payload.data, payload.topic!, payload.event);\n break;\n\n default:\n break;\n }\n });\n };\n return this;\n }\n\n #reSubscribe() {\n for (let topic of this.#subscribedTopics)\n this.subscribe(topic);\n }\n\n subscribe(topic: string) {\n const payload: SocketReqRes = {\n topic: topic,\n event: \"subscribe\",\n data: undefined,\n };\n this.#_sent(payload);\n this.#subscribedTopics.push(topic);\n this.#subscribedTopics = [...new Set(this.#subscribedTopics)];\n }\n\n unSubscribe(topic: string) {\n const payload: SocketReqRes = {\n topic: topic,\n event: \"un-subscribe\",\n data: undefined,\n };\n this.#_sent(payload);\n this.#subscribedTopics = this.#subscribedTopics.filter(t => t !== topic);\n }\n\n publish(topic: string,\n options: {\n data: any,\n event?: event,\n }) {\n const { data, event } = options;\n const payload: SocketReqRes = {\n topic: topic,\n event: event ?? \"message\",\n data: data,\n };\n this.#_sent(payload);\n }\n\n async #_sent(data: SocketReqRes) {\n if (this.#wss?.CONNECTING) {\n await sleep();\n this.#_sent(data);\n return;\n }\n\n const encoder = new TextEncoder();\n const binaryData = encoder.encode(JSON.stringify(data));\n this.#wss?.send(binaryData);\n }\n\n disconnect() {\n this.#wss?.close();\n }\n\n onConnect = (e: any) => { };\n onDisconnect = (e: any) => { };\n onMessage = (data: any, topic: string, event: event) => { };\n}\n\nfunction binaryDecoder(blob: Blob, callback: (data: SocketReqRes) => void) {\n const reader = new FileReader();\n reader.onload = () => {\n const json = JSON.parse(reader.result as string);\n callback({\n event: json.event,\n topic: json.topic,\n data: json.data,\n });\n };\n reader.readAsText(blob);\n}\n\nasync function sleep(milli = 1000) {\n return await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(milli);\n }, milli);\n });\n}\n\ntype event =\n | \"auth\"\n | \"request-auth\"\n | \"subscribe\"\n | \"un-subscribe\"\n | \"message\"\n | \"chat\"\n | \"call\"\n | \"notification\"\n | undefined;\n\ninterface SocketReqRes {\n topic: string | undefined,\n event: event\n data: any\n}\n\ninterface ConnectionProps {\n url: string,\n username: string,\n password: string,\n autoReconnect?: boolean\n}\n\nexport default WebSocketClient;\n"],"names":["_FileUploadByChunk_clientId","WeakMap","_FileUploadByChunk_dirId","_FileUploadByChunk_isPaused","_FileUploadByChunk_uploadUrl","_FileUploadByChunk_actionUrl","_FileUploadByChunk_chunkSize","_FileUploadByChunk_maxConcurrentUpload","_FileUploadByChunk_instances","WeakSet","_FileUploadByChunk_createChunks","file","maxChunkSize","chunkProps","_totalChunk","Math","ceil","size","chunkIndex","push","fileName","name","start","end","totalChunks","_FileUploadByChunk_splitChunksAsBatch","data","splitBy","Formater","array","splitIntoChunks","_FileUploadByChunk_readFileFromChunk","file_1","chunkBatch_1","__awaiter","this","arguments","chunkBatch","setStatus","undefined","onLoad","Error","i","length","__classPrivateFieldGet","batch","simulateDelay","Promise","all","map","props","reader","FileReader","resolve","reject","blob","slice","onload","e","_res","onerror","err","readAsDataURL","getStatus","event","_","metaData","_FileUploadByChunk_upload","call","fileSize","fileType","type","chunk","target","result","fileNames","res","http","request","url","method","headers","status","toString","ms","setTimeout","sleep","milli","__classPrivateFieldSet","_WebSocketClient_wss","WebSocket","_WebSocketClient_url","onopen","onConnect","_WebSocketClient_autoReconnect","_WebSocketClient_instances","_WebSocketClient_reSubscribe","onclose","_WebSocketClient__init","onDisconnect","onmessage","m","_a","readyState","OPEN","callback","json","JSON","parse","topic","readAsText","binaryDecoder","payload","username","_WebSocketClient_username","password","_WebSocketClient_password","_WebSocketClient__sent","onMessage","_WebSocketClient_subscribedTopics","subscribe","CONNECTING","binaryData","TextEncoder","encode","stringify","_b","send","constructor","clientId","dirId","uploadUrl","actionUrl","chunkSize","maxConcurrentUpload","set","onStatus","addEventListener","window","detail","destroy","removeEventListener","uploadFiles","files","f","encodeURIComponent","_FileUploadByChunk_init","_file","_FileUploadByChunk_readFileFromChunkAndUpload","dispatchEvent","CustomEvent","pause","resume","done","id","autoReconnect","getInstance","Set","unSubscribe","filter","t","publish","options","disconnect","close"],"mappings":"kKA0DkBA,EAAA,IAAAC,QAAAC,EAAA,IAAAD,QAAAE,EAAA,IAAAF,QAAAG,EAAA,IAAAH,QAAAI,EAAA,IAAAJ,QAAAK,EAAA,IAAAL,QAAAM,EAAA,IAAAN,QAAAO,EAAA,IAAAC,QAAAC,EAAA,SAAAC,EAAYC,GACtB,IAAIC,EAAgC,GACpC,MAAMC,EAAcC,KAAKC,KAAKL,EAAKM,KAAOL,GAC1C,IAAK,IAAIM,EAAa,EAAGA,EAAaJ,EAAaI,IAE/CL,EAAWM,KAAK,CACZC,SAAUT,EAAKU,KACfH,aACAI,MAAOJ,EAAaN,EAEpBW,IAAML,EAAaN,EAAgBA,IAI3C,MAAO,CACHY,YAAaV,EACbD,WAAYA,EAEpB,EAACY,EAAA,SAEmBC,EAAkBC,GAOlC,OAAOC,EAAAA,SAASC,MAAMC,gBAAgBJ,EAAMC,EAChD,EAACI,EAAA,SAAAC,EAAAC,GAIG,OAAAC,EAAAA,UAAAC,KAAAC,eAAA,GAAA,UAAAzB,EACA0B,EACAC,OAA6CC,EAC7CC,GAEA,IAAK7B,EAAM,MAAM,IAAI8B,MAAM,6BAE3B,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAWM,QAASC,EAAAA,uBAAAT,KAAIhC,EAAA,MAAcuC,IAAK,CAC3D,MAAMG,EAAQR,EAAWK,GAErBE,yBAAAT,KAAIhC,EAAA,WACE2C,EAAc,YAIlBC,QAAQC,IACVH,EAAMI,KAAWC,GAAShB,EAAAA,UAAAC,UAAA,OAAA,GAAA,YACtB,MAAMgB,EAAS,IAAIC,WACnB,aAAa,IAAIL,SAAQ,CAACM,EAASC,KAC/B,MAAMC,EAAO5C,EAAK6C,MAAMN,EAAM5B,MAAO4B,EAAM3B,KAC3C4B,EAAOM,OAAgBC,GAAKxB,EAAAA,UAAAC,UAAA,OAAA,GAAA,YACxB,MAAMwB,QAAanB,EAAOkB,EAAGH,EAAML,GACnCG,EAAQM,EACZ,IACAR,EAAOS,QAAWC,GAAQP,EAAOO,GACjCV,EAAOW,cAAcP,EAAK,GAElC,aAEEpB,KAAK4B,YAOf,CACJ,uBAGI,OAAA7B,EAAAA,UAAAC,KAAAC,eAAA,GAAA,UAAAzB,EACAa,EACAa,EACAC,OAA6CC,GAE7C,IAAK5B,EAAM,MAAM,IAAI8B,MAAM,mCACrBG,EAAAA,uBAAAT,KAAI3B,EAAA,IAAAuB,QAAJI,KACFxB,EACA0B,EACAC,GACA,CAAO0B,EAAOC,EAAGC,IAAYhC,EAAAA,UAAAC,UAAA,OAAA,GAAA,YACzB,aAAaS,EAAAA,uBAAAT,KAAI3B,EAAA,IAAA2D,GAAQC,KAAZjC,KAAa,CACtBf,SAAU8C,EAAS9C,SACnBiD,SAAU1D,EAAKM,KACfqD,SAAU3D,EAAK4D,KACfrD,WAAYgD,EAAShD,WACrBM,YAAaA,EACbgD,MAAOR,EAAMS,OAAQC,QAE7B,KAER,gBAEYC,sDASR,GAAIA,EAAUhC,OAAS,EAAG,CACtB,MAAMiC,QAAYC,EAAAA,KAAKC,QAAQ,CAC3BC,IAAK,GAAGnC,yBAAAT,mBACR6C,OAAQ,OACRC,QAAS,CACL,YAAarC,EAAAA,uBAAAT,KAAInC,EAAA,MAErB0B,KAAMiD,IAGV,GAAIC,GAAsB,MAAfA,EAAIM,OAAgB,OAAON,EAAIlD,KACrC,MAAM,IAAIe,MAAM,kCACzB,CACJ,gBAEcf,sDACV,MAAMkD,QAAYC,EAAAA,KAAKC,QAAQ,CAC3BC,IAAKnC,EAAAA,uBAAAT,KAAI/B,EAAA,KACT4E,OAAQ,OACRC,QAAS,CACL,YAAarC,EAAAA,uBAAAT,KAAInC,EAAA,KACjB,SAAU4C,EAAAA,uBAAAT,KAAIjC,EAAA,KACd,cAAewB,EAAKR,WAAWiE,WAC/B,eAAgBzD,EAAKF,YAAY2D,WACjC,YAAazD,EAAKN,SAClB,YAAaM,EAAK2C,SAASc,WAC3B,YAAazD,EAAK4C,UAEtB5C,KAAMA,EAAK8C,QAEf,GAAII,GAAsB,MAAfA,EAAIM,OAAgB,OAAON,EACjC,MAAM,IAAInC,MAAM,2BACzB,KA8CJ,MAAMK,EAAiBsC,GACnB,IAAIrC,SAAQM,GAAWgC,WAAWhC,EAAS+B,6BCpG/C,SAAeE,IAAM,OAAApD,EAAAA,UAAAC,KAAAC,eAAA,GAAA,UAAAmD,EAAQ,KACzB,aAAa,IAAIxC,SAAQ,CAACM,EAASC,KAC/B+B,YAAW,KACPhC,EAAQkC,EAAM,GACfA,EAAM,GAEjB,GAAC,kHAnFO,OA1CAC,EAAAA,uBAAArD,KAAIsD,EAAQ,IAAIC,UAAU9C,EAAAA,uBAAAT,KAAIwD,EAAA,MAAM,KAEpC/C,EAAAA,uBAAAT,YAAUyD,OAAUlC,IAChBvB,KAAK0D,UAAUnC,GACXd,yBAAAT,KAAI2D,EAAA,MACJlD,EAAAA,uBAAAT,KAAI4D,EAAA,IAAAC,GAAa5B,KAAjBjC,KAAmB,EAG3BS,EAAAA,uBAAAT,YAAU8D,QAAiBvC,GAAUxB,YAAAC,UAAA,OAAA,GAAA,YAC7BS,yBAAAT,KAAI2D,EAAA,aACER,EAAM,KACZ1C,EAAAA,uBAAAT,KAAI4D,EAAA,IAAAG,GAAO9B,KAAXjC,OAEJA,KAAKgE,aAAazC,EACtB,IAEAd,EAAAA,uBAAAT,YAAUiE,UAAaC,mBACfC,EAAA1D,EAAAA,uBAAAT,KAAIsD,EAAA,2BAAOc,cAAeb,UAAUc,MAyFpD,SAAuBjD,EAAYkD,GAC/B,MAAMtD,EAAS,IAAIC,WACnBD,EAAOM,OAAS,KACZ,MAAMiD,EAAOC,KAAKC,MAAMzD,EAAOuB,QAC/B+B,EAAS,CACLzC,MAAO0C,EAAK1C,MACZ6C,MAAOH,EAAKG,MACZnF,KAAMgF,EAAKhF,MACb,EAENyB,EAAO2D,WAAWvD,EACtB,CAlGYwD,CAAcV,EAAE3E,MAAOsF,IACnB,OAAQA,EAAQhD,OACZ,IAAK,eACD,MAAMtC,EAAqB,CACvBmF,WAAOtE,EACPyB,MAAO,OACPtC,KAAM,CACFuF,SAAUrE,EAAAA,uBAAAT,KAAI+E,EAAA,KACdC,SAAUvE,EAAAA,uBAAAT,KAAIiF,EAAA,OAGtBxE,yBAAAT,KAAI4D,EAAA,IAAAsB,GAAOjD,KAAXjC,KAAYT,GACZ,MAEJ,IAAK,UACDS,KAAKmF,UAAUN,EAAQtF,KAAMsF,EAAQH,MAAQG,EAAQhD,UAM/D,EAEC7B,IACX,EAAC6D,EAAA,WAGG,IAAK,IAAIa,KAASjE,EAAAA,uBAAAT,KAAIoF,EAAA,KAClBpF,KAAKqF,UAAUX,EACvB,eAqCanF,8DACT,GAAa,UAATkB,EAAAA,uBAAAT,mBAAS,IAAAmE,OAAA,EAAAA,EAAEmB,WAGX,aAFMnC,SACN1C,yBAAAT,KAAI4D,EAAA,IAAAsB,GAAOjD,KAAXjC,KAAYT,GAIhB,MACMgG,GADU,IAAIC,aACOC,OAAOjB,KAAKkB,UAAUnG,IACxC,QAAToG,EAAAlF,EAAAA,uBAAAT,KAAIsD,EAAA,YAAK,IAAAqC,GAAAA,EAAEC,KAAKL,EACpB,iMDvGJ,MASI,WAAAM,EAAYC,SAAEA,EAAQC,MAAEA,EAAKC,UAAEA,EAASC,UAAEA,EAASC,UAAEA,EAASC,oBAAEA,gBARhEtI,EAAAuI,IAAApG,UAAA,GACAjC,EAAAqI,IAAApG,UAAA,GACAhC,EAAAoI,IAAApG,MAAqB,GACrB/B,EAAAmI,IAAApG,UAAA,GACA9B,EAAAkI,IAAApG,UAAA,GACA7B,EAAAiI,IAAApG,UAAA,GACA5B,EAAAgI,IAAApG,UAAA,GAWAA,KAAAqG,SAAa9G,IAAwB,EAErCS,KAAAsG,iBAAmB,CAACzE,EAAiByC,KACjCiC,OAAOD,iBAAiB,cAAczE,KAAUN,GAAW+C,EAAS/C,EAAEiF,UAE/D,CACHC,QAAS,KACLF,OAAOG,oBAAoB,cAAc7E,IAASyC,EAAS,IAfnEjB,EAAAA,uBAAArD,KAAInC,EAAaiI,EAAQ,KACzBzC,EAAAA,uBAAArD,KAAIjC,EAAUgI,EAAK,KACnB1C,EAAAA,uBAAArD,KAAI/B,EAAc+H,EAAS,KAC3B3C,EAAAA,uBAAArD,KAAI9B,EAAc+H,EAAS,KAC3B5C,yBAAArD,KAAI7B,EAAc+H,GAAa,QAAiB,KAChD7C,EAAAA,uBAAArD,KAAI5B,EAAwB+H,GAAuB,MACvD,CAcM,WAAAQ,CAAYC,sDACd,GAAIA,EAAMpG,OAAS,EAAG,CAClB,MAAMgC,EAAYoE,EAAM9F,KAAK+F,GAAMC,mBAAmBD,EAAE3H,cAClDuB,EAAAA,uBAAAT,KAAI3B,EAAA,IAAA0I,GAAM9E,KAAVjC,KAAWwC,SACXxC,KAAK4B,YAEX,IAAK,IAAIoF,KAASJ,EAAQ,CACtB,MAAMvH,YAAEA,EAAWX,WAAEA,GAAe+B,EAAAA,uBAAAT,KAAI3B,EAAA,IAAAE,GAAc0D,KAAlBjC,KAAmBgH,EAAOvG,EAAAA,uBAAAT,KAAI7B,EAAA,MAC5D+B,EAAaO,EAAAA,uBAAAT,cAAwBiC,KAAxBjC,KAAyBtB,EAAY+B,EAAAA,uBAAAT,KAAI5B,EAAA,YACtDqC,yBAAAT,KAAI3B,EAAA,IAAA4I,GAA4BhF,KAAhCjC,KAAiCgH,EAAO3H,EAAaa,OAAYE,EAC3E,CACJ,CACJ,GAAC,CA4IK,SAAAwB,sDACF,MAAMa,QAAYC,EAAAA,KAAKC,QAAQ,CAC3BC,IAAK,GAAGnC,yBAAAT,qBACR6C,OAAQ,OACRC,QAAS,CACL,YAAarC,EAAAA,uBAAAT,KAAInC,EAAA,QAGzB,GAAI4E,GAAsB,MAAfA,EAAIM,OAGX,OAFA/C,KAAKqG,SAAS5D,EAAIlD,MAClBgH,OAAOW,cAAc,IAAIC,YAAY,oBAAqB,CAAEX,OAAQ/D,EAAIlD,QACjEkD,EAEN,MAAM,IAAInC,MAAM,sCACzB,GAAC,CAED,KAAA8G,GAEI,OADA/D,EAAAA,uBAAArD,KAAIhC,GAAa,EAAI,KACdyC,yBAAAT,KAAIhC,EAAA,IACf,CAEA,MAAAqJ,GAEI,OADAhE,EAAAA,uBAAArD,KAAIhC,GAAa,EAAK,KACfyC,yBAAAT,KAAIhC,EAAA,IACf,CAEM,IAAAsJ,CAAKC,sDACP,MAAM9E,QAAYC,EAAAA,KAAKC,QAAQ,CAC3BC,IAAK,GAAGnC,yBAAAT,mBACR6C,OAAQ,OACRC,QAAS,CACL,YAAarC,EAAAA,uBAAAT,KAAInC,EAAA,MAErB0B,KAAM,CAAEgI,QAEZ,GAAI9E,GAAsB,MAAfA,EAAIM,OAEX,aADM/C,KAAK4B,aACJ,EAGP,MAAM,IAAItB,MAAM,sCACxB,GAAC,2BC7OL,MAQI,WAAAuF,CAAY9E,qBAPZyC,EAAA4C,IAAApG,KAAe,IACf+E,EAAAqB,IAAApG,KAAoB,IACpBiF,EAAAmB,IAAApG,KAAoB,IACpB2D,EAAAyC,IAAApG,MAA0B,GAC1BsD,EAAA8C,IAAApG,UAAmBI,GACnBgF,EAAAgB,IAAApG,KAAmC,IAqHnCA,KAAA0D,UAAanC,IAAD,EACZvB,KAAAgE,aAAgBzC,IAAD,EACfvB,KAAAmF,UAAY,CAAC5F,EAAWmF,EAAe7C,KAA3B,EApHRwB,EAAAA,uBAAArD,KAAIwD,EAAQzC,EAAM6B,SAClBS,EAAAA,uBAAArD,KAAI+E,EAAahE,EAAM+D,cACvBzB,EAAAA,uBAAArD,KAAIiF,EAAalE,EAAMiE,cACvB3B,EAAAA,uBAAArD,OAAyC,QAAnBmE,EAAApD,EAAMyG,qBAAa,IAAArD,GAAAA,EAAS,KAElD1D,EAAAA,uBAAAT,KAAI4D,EAAA,IAAAG,GAAO9B,KAAXjC,KACJ,CAEA,kBAAOyH,GACH,OAAOzH,IACX,CAqDA,SAAAqF,CAAUX,GACN,MAAMG,EAAwB,CAC1BH,MAAOA,EACP7C,MAAO,YACPtC,UAAMa,GAEVK,yBAAAT,KAAI4D,EAAA,IAAAsB,GAAOjD,KAAXjC,KAAY6E,GACZpE,EAAAA,uBAAAT,KAAIoF,EAAA,KAAmBpG,KAAK0F,GAC5BrB,EAAAA,uBAAArD,KAAIoF,EAAqB,IAAI,IAAIsC,IAAIjH,yBAAAT,KAAIoF,EAAA,WAC7C,CAEA,WAAAuC,CAAYjD,GACR,MAAMG,EAAwB,CAC1BH,MAAOA,EACP7C,MAAO,eACPtC,UAAMa,GAEVK,yBAAAT,KAAI4D,EAAA,IAAAsB,GAAOjD,KAAXjC,KAAY6E,GACZxB,EAAAA,uBAAArD,KAAIoF,EAAqB3E,EAAAA,uBAAAT,KAAIoF,EAAA,KAAmBwC,QAAOC,GAAKA,IAAMnD,QACtE,CAEA,OAAAoD,CAAQpD,EACJqD,GAIA,MAAMxI,KAAEA,EAAIsC,MAAEA,GAAUkG,EAClBlD,EAAwB,CAC1BH,MAAOA,EACP7C,MAAOA,QAAAA,EAAS,UAChBtC,KAAMA,GAEVkB,yBAAAT,KAAI4D,EAAA,IAAAsB,GAAOjD,KAAXjC,KAAY6E,EAChB,CAcA,UAAAmD,SACa,QAAT7D,EAAA1D,EAAAA,uBAAAT,KAAIsD,EAAA,YAAK,IAAAa,GAAAA,EAAE8D,OACf"}
@@ -115,4 +115,27 @@ declare class SharedPreference {
115
115
  static remove(key: string): void;
116
116
  }
117
117
 
118
- export { ColorUtil, FileUploadByChunk, Formater, PubSub, SharedPreference, generateUUID };
118
+ declare class WebSocketClient {
119
+ #private;
120
+ constructor(props: ConnectionProps);
121
+ static getInstance(): typeof WebSocketClient;
122
+ subscribe(topic: string): void;
123
+ unSubscribe(topic: string): void;
124
+ publish(topic: string, options: {
125
+ data: any;
126
+ event?: event;
127
+ }): void;
128
+ disconnect(): void;
129
+ onConnect: (e: any) => void;
130
+ onDisconnect: (e: any) => void;
131
+ onMessage: (data: any, topic: string, event: event) => void;
132
+ }
133
+ type event = "auth" | "request-auth" | "subscribe" | "un-subscribe" | "message" | "chat" | "call" | "notification" | undefined;
134
+ interface ConnectionProps {
135
+ url: string;
136
+ username: string;
137
+ password: string;
138
+ autoReconnect?: boolean;
139
+ }
140
+
141
+ export { ColorUtil, FileUploadByChunk, Formater, PubSub, SharedPreference, WebSocketClient, generateUUID };
@@ -1,2 +1,2 @@
1
- import{F as t}from"../Formater-PQis9JjD.mjs.js";export{C as ColorUtil,P as PubSub,S as SharedPreference,g as generateUUID}from"../Formater-PQis9JjD.mjs.js";import{_ as e,c as i,a as s}from"../tslib.es6-h8_YZvZK.mjs.js";import{http as n}from"../http/index.mjs.js";var o,r,a,d,l,h,u,f,c,m,p,v,w,k;class y{constructor({clientId:t,dirId:i,uploadUrl:s,actionUrl:n,chunkSize:c,maxConcurrentUpload:m}){o.add(this),r.set(this,void 0),a.set(this,void 0),d.set(this,!1),l.set(this,void 0),h.set(this,void 0),u.set(this,void 0),f.set(this,void 0),this.onStatus=t=>{},this.addEventListener=(t,e)=>(window.addEventListener(`fileupload/${t}`,(t=>e(t.detail))),{destroy:()=>{window.removeEventListener(`fileupload/${t}`,e)}}),e(this,r,t,"f"),e(this,a,i,"f"),e(this,l,s,"f"),e(this,h,n,"f"),e(this,u,c||1048576,"f"),e(this,f,m||5,"f")}uploadFiles(t){return i(this,void 0,void 0,(function*(){if(t.length>0){const e=t.map((t=>encodeURIComponent(t.name)));yield s(this,o,"m",w).call(this,e),yield this.getStatus();for(let e of t){const{totalChunks:t,chunkProps:i}=s(this,o,"m",c).call(this,e,s(this,u,"f")),n=s(this,o,"m",m).call(this,i,s(this,f,"f"));yield s(this,o,"m",v).call(this,e,t,n,void 0)}}}))}getStatus(){return i(this,void 0,void 0,(function*(){const t=yield n.request({url:`${s(this,h,"f")}/status`,method:"POST",headers:{"Client-Id":s(this,r,"f")}});if(t&&200===t.status)return this.onStatus(t.data),window.dispatchEvent(new CustomEvent("fileupload/status",{detail:t.data})),t;throw new Error("Unable to fetch fileupload status !")}))}pause(){return e(this,d,!0,"f"),s(this,d,"f")}resume(){return e(this,d,!1,"f"),s(this,d,"f")}done(t){return i(this,void 0,void 0,(function*(){const e=yield n.request({url:`${s(this,h,"f")}/done`,method:"POST",headers:{"Client-Id":s(this,r,"f")},data:{id:t}});if(e&&200===e.status)return yield this.getStatus(),!0;throw new Error("Unable to fetch fileupload status !")}))}}r=new WeakMap,a=new WeakMap,d=new WeakMap,l=new WeakMap,h=new WeakMap,u=new WeakMap,f=new WeakMap,o=new WeakSet,c=function(t,e){let i=[];const s=Math.ceil(t.size/e);for(let n=0;n<s;n++)i.push({fileName:t.name,chunkIndex:n,start:n*e,end:n*e+e});return{totalChunks:s,chunkProps:i}},m=function(e,i){return t.array.splitIntoChunks(e,i)},p=function(t,e){return i(this,arguments,void 0,(function*(t,e,n=void 0,o){if(!t)throw new Error("File should not be null !");for(let n=0;n<e.length;!s(this,d,"f")&&n++){const r=e[n];s(this,d,"f")?yield I(1e3):(yield Promise.all(r.map((e=>i(this,void 0,void 0,(function*(){const s=new FileReader;return yield new Promise(((n,r)=>{const a=t.slice(e.start,e.end);s.onload=t=>i(this,void 0,void 0,(function*(){const i=yield o(t,a,e);n(i)})),s.onerror=t=>r(t),s.readAsDataURL(a)}))}))))),yield this.getStatus())}}))},v=function(t,e,n){return i(this,arguments,void 0,(function*(t,e,n,r=void 0){if(!t)throw new Error("File should not be null !");yield s(this,o,"m",p).call(this,t,n,r,((n,r,a)=>i(this,void 0,void 0,(function*(){return yield s(this,o,"m",k).call(this,{fileName:a.fileName,fileSize:t.size,fileType:t.type,chunkIndex:a.chunkIndex,totalChunks:e,chunk:n.target.result})}))))}))},w=function(t){return i(this,void 0,void 0,(function*(){if(t.length>0){const e=yield n.request({url:`${s(this,h,"f")}/init`,method:"POST",headers:{"Client-Id":s(this,r,"f")},data:t});if(e&&200===e.status)return e.data;throw new Error("Unable to init file meta data !")}}))},k=function(t){return i(this,void 0,void 0,(function*(){const e=yield n.request({url:s(this,l,"f"),method:"POST",headers:{"Client-Id":s(this,r,"f"),"Dir-Id":s(this,a,"f"),"Chunk-Index":t.chunkIndex.toString(),"Total-Chunks":t.totalChunks.toString(),"File-Name":t.fileName,"File-Size":t.fileSize.toString(),"File-Type":t.fileType},data:t.chunk});if(e&&200===e.status)return e;throw new Error("Unable to upload chunk !")}))};const I=t=>new Promise((e=>setTimeout(e,t)));export{y as FileUploadByChunk,t as Formater};
1
+ import{F as t}from"../Formater-PQis9JjD.mjs.js";export{C as ColorUtil,P as PubSub,S as SharedPreference,g as generateUUID}from"../Formater-PQis9JjD.mjs.js";import{_ as e,c as i,a as s}from"../tslib.es6-h8_YZvZK.mjs.js";import{http as n}from"../http/index.mjs.js";var o,a,r,h,d,l,u,c,f,v,m,p,w,k;class y{constructor({clientId:t,dirId:i,uploadUrl:s,actionUrl:n,chunkSize:f,maxConcurrentUpload:v}){o.add(this),a.set(this,void 0),r.set(this,void 0),h.set(this,!1),d.set(this,void 0),l.set(this,void 0),u.set(this,void 0),c.set(this,void 0),this.onStatus=t=>{},this.addEventListener=(t,e)=>(window.addEventListener(`fileupload/${t}`,(t=>e(t.detail))),{destroy:()=>{window.removeEventListener(`fileupload/${t}`,e)}}),e(this,a,t,"f"),e(this,r,i,"f"),e(this,d,s,"f"),e(this,l,n,"f"),e(this,u,f||1048576,"f"),e(this,c,v||5,"f")}uploadFiles(t){return i(this,void 0,void 0,(function*(){if(t.length>0){const e=t.map((t=>encodeURIComponent(t.name)));yield s(this,o,"m",w).call(this,e),yield this.getStatus();for(let e of t){const{totalChunks:t,chunkProps:i}=s(this,o,"m",f).call(this,e,s(this,u,"f")),n=s(this,o,"m",v).call(this,i,s(this,c,"f"));yield s(this,o,"m",p).call(this,e,t,n,void 0)}}}))}getStatus(){return i(this,void 0,void 0,(function*(){const t=yield n.request({url:`${s(this,l,"f")}/status`,method:"POST",headers:{"Client-Id":s(this,a,"f")}});if(t&&200===t.status)return this.onStatus(t.data),window.dispatchEvent(new CustomEvent("fileupload/status",{detail:t.data})),t;throw new Error("Unable to fetch fileupload status !")}))}pause(){return e(this,h,!0,"f"),s(this,h,"f")}resume(){return e(this,h,!1,"f"),s(this,h,"f")}done(t){return i(this,void 0,void 0,(function*(){const e=yield n.request({url:`${s(this,l,"f")}/done`,method:"POST",headers:{"Client-Id":s(this,a,"f")},data:{id:t}});if(e&&200===e.status)return yield this.getStatus(),!0;throw new Error("Unable to fetch fileupload status !")}))}}a=new WeakMap,r=new WeakMap,h=new WeakMap,d=new WeakMap,l=new WeakMap,u=new WeakMap,c=new WeakMap,o=new WeakSet,f=function(t,e){let i=[];const s=Math.ceil(t.size/e);for(let n=0;n<s;n++)i.push({fileName:t.name,chunkIndex:n,start:n*e,end:n*e+e});return{totalChunks:s,chunkProps:i}},v=function(e,i){return t.array.splitIntoChunks(e,i)},m=function(t,e){return i(this,arguments,void 0,(function*(t,e,n=void 0,o){if(!t)throw new Error("File should not be null !");for(let n=0;n<e.length;!s(this,h,"f")&&n++){const a=e[n];s(this,h,"f")?yield b(1e3):(yield Promise.all(a.map((e=>i(this,void 0,void 0,(function*(){const s=new FileReader;return yield new Promise(((n,a)=>{const r=t.slice(e.start,e.end);s.onload=t=>i(this,void 0,void 0,(function*(){const i=yield o(t,r,e);n(i)})),s.onerror=t=>a(t),s.readAsDataURL(r)}))}))))),yield this.getStatus())}}))},p=function(t,e,n){return i(this,arguments,void 0,(function*(t,e,n,a=void 0){if(!t)throw new Error("File should not be null !");yield s(this,o,"m",m).call(this,t,n,a,((n,a,r)=>i(this,void 0,void 0,(function*(){return yield s(this,o,"m",k).call(this,{fileName:r.fileName,fileSize:t.size,fileType:t.type,chunkIndex:r.chunkIndex,totalChunks:e,chunk:n.target.result})}))))}))},w=function(t){return i(this,void 0,void 0,(function*(){if(t.length>0){const e=yield n.request({url:`${s(this,l,"f")}/init`,method:"POST",headers:{"Client-Id":s(this,a,"f")},data:t});if(e&&200===e.status)return e.data;throw new Error("Unable to init file meta data !")}}))},k=function(t){return i(this,void 0,void 0,(function*(){const e=yield n.request({url:s(this,d,"f"),method:"POST",headers:{"Client-Id":s(this,a,"f"),"Dir-Id":s(this,r,"f"),"Chunk-Index":t.chunkIndex.toString(),"Total-Chunks":t.totalChunks.toString(),"File-Name":t.fileName,"File-Size":t.fileSize.toString(),"File-Type":t.fileType},data:t.chunk});if(e&&200===e.status)return e;throw new Error("Unable to upload chunk !")}))};const b=t=>new Promise((e=>setTimeout(e,t)));var I,W,M,E,T,U,x,F,N,j;class O{constructor(t){var i;I.add(this),W.set(this,""),M.set(this,""),E.set(this,""),T.set(this,!1),U.set(this,void 0),x.set(this,[]),this.onConnect=t=>{},this.onDisconnect=t=>{},this.onMessage=(t,e,i)=>{},e(this,W,t.url,"f"),e(this,M,t.username,"f"),e(this,E,t.password,"f"),e(this,T,null!==(i=t.autoReconnect)&&void 0!==i&&i,"f"),s(this,I,"m",F).call(this)}static getInstance(){return this}subscribe(t){const i={topic:t,event:"subscribe",data:void 0};s(this,I,"m",j).call(this,i),s(this,x,"f").push(t),e(this,x,[...new Set(s(this,x,"f"))],"f")}unSubscribe(t){const i={topic:t,event:"un-subscribe",data:void 0};s(this,I,"m",j).call(this,i),e(this,x,s(this,x,"f").filter((e=>e!==t)),"f")}publish(t,e){const{data:i,event:n}=e,o={topic:t,event:null!=n?n:"message",data:i};s(this,I,"m",j).call(this,o)}disconnect(){var t;null===(t=s(this,U,"f"))||void 0===t||t.close()}}function z(){return i(this,arguments,void 0,(function*(t=1e3){return yield new Promise(((e,i)=>{setTimeout((()=>{e(t)}),t)}))}))}W=new WeakMap,M=new WeakMap,E=new WeakMap,T=new WeakMap,U=new WeakMap,x=new WeakMap,I=new WeakSet,F=function t(){return e(this,U,new WebSocket(s(this,W,"f")),"f"),s(this,U,"f").onopen=t=>{this.onConnect(t),s(this,T,"f")&&s(this,I,"m",N).call(this)},s(this,U,"f").onclose=e=>i(this,void 0,void 0,(function*(){s(this,T,"f")&&(yield z(3e3),s(this,I,"m",t).call(this)),this.onDisconnect(e)})),s(this,U,"f").onmessage=t=>{var e;(null===(e=s(this,U,"f"))||void 0===e?void 0:e.readyState)===WebSocket.OPEN&&function(t,e){const i=new FileReader;i.onload=()=>{const t=JSON.parse(i.result);e({event:t.event,topic:t.topic,data:t.data})},i.readAsText(t)}(t.data,(t=>{switch(t.event){case"request-auth":const e={topic:void 0,event:"auth",data:{username:s(this,M,"f"),password:s(this,E,"f")}};s(this,I,"m",j).call(this,e);break;case"message":this.onMessage(t.data,t.topic,t.event)}}))},this},N=function(){for(let t of s(this,x,"f"))this.subscribe(t)},j=function t(e){return i(this,void 0,void 0,(function*(){var i,n;if(null===(i=s(this,U,"f"))||void 0===i?void 0:i.CONNECTING)return yield z(),void s(this,I,"m",t).call(this,e);const o=(new TextEncoder).encode(JSON.stringify(e));null===(n=s(this,U,"f"))||void 0===n||n.send(o)}))};export{y as FileUploadByChunk,t as Formater,O as WebSocketClient};
2
2
  //# sourceMappingURL=index.mjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs.js","sources":["../../src/util/FileUploadByChunk.ts"],"sourcesContent":["// import axios, { type AxiosResponse } from \"axios\";\n// import httpRequest from \"../http\";\nimport http from \"../http/index\";\nimport Formater from \"./Formater\";\n\ninterface ChunkHelperOptions {\n clientId: string;\n uploadUrl: string;\n actionUrl: string;\n dirId: string;\n chunkSize?: number;\n maxConcurrentUpload?: number;\n}\n\nclass FileUploadByChunk {\n #clientId: string;\n #dirId: string;\n #isPaused: boolean = false;\n #uploadUrl: string;\n #actionUrl: string;\n #chunkSize: number;\n #maxConcurrentUpload: number;\n\n constructor({ clientId, dirId, uploadUrl, actionUrl, chunkSize, maxConcurrentUpload }: ChunkHelperOptions) {\n this.#clientId = clientId;\n this.#dirId = dirId;\n this.#uploadUrl = uploadUrl;\n this.#actionUrl = actionUrl;\n this.#chunkSize = chunkSize || (1024 * 1024) * 1;\n this.#maxConcurrentUpload = maxConcurrentUpload || 5;\n }\n\n onStatus = ((data?: any): void => { })\n\n addEventListener = (event: \"status\", callback: (data: any) => void) => {\n window.addEventListener(`fileupload/${event}`, (e: any) => callback(e.detail));\n\n return {\n destroy: () => {\n window.removeEventListener(`fileupload/${event}`, callback);\n }\n }\n }\n\n async uploadFiles(files: Array<File>) {\n if (files.length > 0) {\n const fileNames = files.map((f) => encodeURIComponent(f.name));\n await this.#init(fileNames);\n await this.getStatus();\n\n for (let _file of files!) {\n const { totalChunks, chunkProps } = this.#createChunks(_file, this.#chunkSize);\n const chunkBatch = this.#splitChunksAsBatch(chunkProps, this.#maxConcurrentUpload);\n await this.#readFileFromChunkAndUpload(_file, totalChunks, chunkBatch, undefined);\n }\n }\n }\n\n #createChunks(file: File, maxChunkSize: number): ChunkModel {\n let chunkProps: Array<ChunkProps> = [];\n const _totalChunk = Math.ceil(file.size / maxChunkSize);\n for (let chunkIndex = 0; chunkIndex < _totalChunk; chunkIndex++) {\n // if (!uploadedChunks.includes(chunkIndex)) {\n chunkProps.push({\n fileName: file.name,\n chunkIndex,\n start: chunkIndex * maxChunkSize,\n // end: Math.min((i + 1) * maxChunkSize, file.size)\n end: (chunkIndex * maxChunkSize) + maxChunkSize\n });\n // }\n }\n return {\n totalChunks: _totalChunk,\n chunkProps: chunkProps,\n };\n }\n\n #splitChunksAsBatch(data: Array<any>, splitBy: number): Array<Array<ChunkProps>> {\n // let _batchArray: Array<Array<ChunkProps>> = [];\n // for (let i = 0; i < data.length; i += splitBy) {\n // const _batch = data.slice(i, i + splitBy);\n // _batchArray.push(_batch);\n // }\n // return _batchArray;\n return Formater.array.splitIntoChunks(data, splitBy);\n }\n\n\n async #readFileFromChunk(\n file: File | null,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n onLoad: (event: ProgressEvent<FileReader>, blob: Blob, metaData: ChunkProps) => Promise<any>,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n\n for (let i = 0; i < chunkBatch.length; !this.#isPaused && i++) {\n const batch = chunkBatch[i];\n\n if (this.#isPaused) {\n await simulateDelay(1000);\n continue;\n }\n\n await Promise.all(\n batch.map(async (props) => {\n const reader = new FileReader();\n return await new Promise((resolve, reject) => {\n const blob = file.slice(props.start, props.end);\n reader.onload = async (e) => {\n const _res = await onLoad(e, blob, props);\n resolve(_res);\n };\n reader.onerror = (err) => reject(err)\n reader.readAsDataURL(blob);\n })\n })\n );\n await this.getStatus()\n // .then(res => {\n // if (res && res.status === 200 && setStatus) {\n // setStatus(res.data);\n // this.onStatus(res.data);\n // }\n // });\n }\n }\n\n async #readFileFromChunkAndUpload(\n file: File | null,\n totalChunks: number,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n await this.#readFileFromChunk(\n file,\n chunkBatch,\n setStatus,\n async (event, _, metaData) => {\n return await this.#upload({\n fileName: metaData.fileName,\n fileSize: file.size,\n fileType: file.type,\n chunkIndex: metaData.chunkIndex,\n totalChunks: totalChunks,\n chunk: event.target!.result,\n });\n },\n )\n }\n\n async #init(fileNames: string[]) {\n // const res = await axios.request({\n // url: `${this.#actionUrl}/init`,\n // method: \"POST\",\n // data: fileNames,\n // headers: {\n // \"Client-Id\": this.#clientId,\n // }\n // });\n if (fileNames.length > 0) {\n const res = await http.request({\n url: `${this.#actionUrl}/init`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: fileNames,\n });\n\n if (res && res.status === 200) return res.data;\n else throw new Error(\"Unable to init file meta data !\");\n }\n }\n\n async #upload(data: ChunkUploadProps) {\n const res = await http.request({\n url: this.#uploadUrl,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n \"Dir-Id\": this.#dirId,\n \"Chunk-Index\": data.chunkIndex.toString(),\n \"Total-Chunks\": data.totalChunks.toString(),\n \"File-Name\": data.fileName,\n \"File-Size\": data.fileSize.toString(),\n \"File-Type\": data.fileType,\n },\n data: data.chunk,\n })\n if (res && res.status === 200) return res;\n else throw new Error(\"Unable to upload chunk !\");\n }\n\n async getStatus() {\n const res = await http.request({\n url: `${this.#actionUrl}/status`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n }\n });\n if (res && res.status === 200) {\n this.onStatus(res.data);\n window.dispatchEvent(new CustomEvent(\"fileupload/status\", { detail: res.data }));\n return res;\n }\n else throw new Error(\"Unable to fetch fileupload status !\");\n }\n\n pause() {\n this.#isPaused = true;\n return this.#isPaused;\n }\n\n resume() {\n this.#isPaused = false;\n return this.#isPaused;\n }\n\n async done(id: string) {\n const res = await http.request({\n url: `${this.#actionUrl}/done`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: { id }\n });\n if (res && res.status === 200) {\n await this.getStatus();\n return true;\n }\n else\n throw new Error(\"Unable to fetch fileupload status !\");\n }\n}\n\nconst simulateDelay = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n\nexport { FileUploadByChunk };\n\ninterface ChunkModel {\n totalChunks: number;\n chunkProps: Array<ChunkProps>;\n}\n\ninterface ChunkProps {\n fileName: string;\n chunkIndex: number;\n start: number;\n end: number;\n}\n\ninterface ChunkUploadProps {\n chunk: string | ArrayBuffer | null | undefined;\n chunkIndex: number;\n totalChunks: number;\n fileName: string;\n fileSize: number;\n fileType: string;\n}"],"names":["FileUploadByChunk","constructor","clientId","dirId","uploadUrl","actionUrl","chunkSize","maxConcurrentUpload","_FileUploadByChunk_clientId","set","this","_FileUploadByChunk_dirId","_FileUploadByChunk_isPaused","_FileUploadByChunk_uploadUrl","_FileUploadByChunk_actionUrl","_FileUploadByChunk_chunkSize","_FileUploadByChunk_maxConcurrentUpload","onStatus","data","addEventListener","event","callback","window","e","detail","destroy","removeEventListener","__classPrivateFieldSet","uploadFiles","files","length","fileNames","map","f","encodeURIComponent","name","__classPrivateFieldGet","_FileUploadByChunk_instances","_FileUploadByChunk_init","call","getStatus","_file","totalChunks","chunkProps","_FileUploadByChunk_createChunks","chunkBatch","_FileUploadByChunk_readFileFromChunkAndUpload","undefined","res","http","request","url","method","headers","status","dispatchEvent","CustomEvent","Error","pause","resume","done","id","WeakMap","WeakSet","file","maxChunkSize","_totalChunk","Math","ceil","size","chunkIndex","push","fileName","start","end","_FileUploadByChunk_splitChunksAsBatch","splitBy","Formater","array","splitIntoChunks","_FileUploadByChunk_readFileFromChunk","file_1","chunkBatch_1","__awaiter","arguments","setStatus","onLoad","i","batch","simulateDelay","Promise","all","props","reader","FileReader","resolve","reject","blob","slice","onload","_res","onerror","err","readAsDataURL","_","metaData","_FileUploadByChunk_upload","fileSize","fileType","type","chunk","target","result","toString","ms","setTimeout"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs.js","sources":["../../src/util/FileUploadByChunk.ts","../../src/util/WebSocket.client.ts"],"sourcesContent":["// import axios, { type AxiosResponse } from \"axios\";\n// import httpRequest from \"../http\";\nimport http from \"../http/index\";\nimport Formater from \"./Formater\";\n\ninterface ChunkHelperOptions {\n clientId: string;\n uploadUrl: string;\n actionUrl: string;\n dirId: string;\n chunkSize?: number;\n maxConcurrentUpload?: number;\n}\n\nclass FileUploadByChunk {\n #clientId: string;\n #dirId: string;\n #isPaused: boolean = false;\n #uploadUrl: string;\n #actionUrl: string;\n #chunkSize: number;\n #maxConcurrentUpload: number;\n\n constructor({ clientId, dirId, uploadUrl, actionUrl, chunkSize, maxConcurrentUpload }: ChunkHelperOptions) {\n this.#clientId = clientId;\n this.#dirId = dirId;\n this.#uploadUrl = uploadUrl;\n this.#actionUrl = actionUrl;\n this.#chunkSize = chunkSize || (1024 * 1024) * 1;\n this.#maxConcurrentUpload = maxConcurrentUpload || 5;\n }\n\n onStatus = ((data?: any): void => { })\n\n addEventListener = (event: \"status\", callback: (data: any) => void) => {\n window.addEventListener(`fileupload/${event}`, (e: any) => callback(e.detail));\n\n return {\n destroy: () => {\n window.removeEventListener(`fileupload/${event}`, callback);\n }\n }\n }\n\n async uploadFiles(files: Array<File>) {\n if (files.length > 0) {\n const fileNames = files.map((f) => encodeURIComponent(f.name));\n await this.#init(fileNames);\n await this.getStatus();\n\n for (let _file of files!) {\n const { totalChunks, chunkProps } = this.#createChunks(_file, this.#chunkSize);\n const chunkBatch = this.#splitChunksAsBatch(chunkProps, this.#maxConcurrentUpload);\n await this.#readFileFromChunkAndUpload(_file, totalChunks, chunkBatch, undefined);\n }\n }\n }\n\n #createChunks(file: File, maxChunkSize: number): ChunkModel {\n let chunkProps: Array<ChunkProps> = [];\n const _totalChunk = Math.ceil(file.size / maxChunkSize);\n for (let chunkIndex = 0; chunkIndex < _totalChunk; chunkIndex++) {\n // if (!uploadedChunks.includes(chunkIndex)) {\n chunkProps.push({\n fileName: file.name,\n chunkIndex,\n start: chunkIndex * maxChunkSize,\n // end: Math.min((i + 1) * maxChunkSize, file.size)\n end: (chunkIndex * maxChunkSize) + maxChunkSize\n });\n // }\n }\n return {\n totalChunks: _totalChunk,\n chunkProps: chunkProps,\n };\n }\n\n #splitChunksAsBatch(data: Array<any>, splitBy: number): Array<Array<ChunkProps>> {\n // let _batchArray: Array<Array<ChunkProps>> = [];\n // for (let i = 0; i < data.length; i += splitBy) {\n // const _batch = data.slice(i, i + splitBy);\n // _batchArray.push(_batch);\n // }\n // return _batchArray;\n return Formater.array.splitIntoChunks(data, splitBy);\n }\n\n\n async #readFileFromChunk(\n file: File | null,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n onLoad: (event: ProgressEvent<FileReader>, blob: Blob, metaData: ChunkProps) => Promise<any>,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n\n for (let i = 0; i < chunkBatch.length; !this.#isPaused && i++) {\n const batch = chunkBatch[i];\n\n if (this.#isPaused) {\n await simulateDelay(1000);\n continue;\n }\n\n await Promise.all(\n batch.map(async (props) => {\n const reader = new FileReader();\n return await new Promise((resolve, reject) => {\n const blob = file.slice(props.start, props.end);\n reader.onload = async (e) => {\n const _res = await onLoad(e, blob, props);\n resolve(_res);\n };\n reader.onerror = (err) => reject(err)\n reader.readAsDataURL(blob);\n })\n })\n );\n await this.getStatus()\n // .then(res => {\n // if (res && res.status === 200 && setStatus) {\n // setStatus(res.data);\n // this.onStatus(res.data);\n // }\n // });\n }\n }\n\n async #readFileFromChunkAndUpload(\n file: File | null,\n totalChunks: number,\n chunkBatch: Array<Array<ChunkProps>>,\n setStatus: React.Dispatch<any> | undefined = undefined,\n ) {\n if (!file) throw new Error(\"File should not be null !\");\n await this.#readFileFromChunk(\n file,\n chunkBatch,\n setStatus,\n async (event, _, metaData) => {\n return await this.#upload({\n fileName: metaData.fileName,\n fileSize: file.size,\n fileType: file.type,\n chunkIndex: metaData.chunkIndex,\n totalChunks: totalChunks,\n chunk: event.target!.result,\n });\n },\n )\n }\n\n async #init(fileNames: string[]) {\n // const res = await axios.request({\n // url: `${this.#actionUrl}/init`,\n // method: \"POST\",\n // data: fileNames,\n // headers: {\n // \"Client-Id\": this.#clientId,\n // }\n // });\n if (fileNames.length > 0) {\n const res = await http.request({\n url: `${this.#actionUrl}/init`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: fileNames,\n });\n\n if (res && res.status === 200) return res.data;\n else throw new Error(\"Unable to init file meta data !\");\n }\n }\n\n async #upload(data: ChunkUploadProps) {\n const res = await http.request({\n url: this.#uploadUrl,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n \"Dir-Id\": this.#dirId,\n \"Chunk-Index\": data.chunkIndex.toString(),\n \"Total-Chunks\": data.totalChunks.toString(),\n \"File-Name\": data.fileName,\n \"File-Size\": data.fileSize.toString(),\n \"File-Type\": data.fileType,\n },\n data: data.chunk,\n })\n if (res && res.status === 200) return res;\n else throw new Error(\"Unable to upload chunk !\");\n }\n\n async getStatus() {\n const res = await http.request({\n url: `${this.#actionUrl}/status`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n }\n });\n if (res && res.status === 200) {\n this.onStatus(res.data);\n window.dispatchEvent(new CustomEvent(\"fileupload/status\", { detail: res.data }));\n return res;\n }\n else throw new Error(\"Unable to fetch fileupload status !\");\n }\n\n pause() {\n this.#isPaused = true;\n return this.#isPaused;\n }\n\n resume() {\n this.#isPaused = false;\n return this.#isPaused;\n }\n\n async done(id: string) {\n const res = await http.request({\n url: `${this.#actionUrl}/done`,\n method: \"POST\",\n headers: {\n \"Client-Id\": this.#clientId,\n },\n data: { id }\n });\n if (res && res.status === 200) {\n await this.getStatus();\n return true;\n }\n else\n throw new Error(\"Unable to fetch fileupload status !\");\n }\n}\n\nconst simulateDelay = (ms: number) =>\n new Promise(resolve => setTimeout(resolve, ms));\n\nexport { FileUploadByChunk };\n\ninterface ChunkModel {\n totalChunks: number;\n chunkProps: Array<ChunkProps>;\n}\n\ninterface ChunkProps {\n fileName: string;\n chunkIndex: number;\n start: number;\n end: number;\n}\n\ninterface ChunkUploadProps {\n chunk: string | ArrayBuffer | null | undefined;\n chunkIndex: number;\n totalChunks: number;\n fileName: string;\n fileSize: number;\n fileType: string;\n}","class WebSocketClient {\n #url: string = \"\";\n #username: string = \"\";\n #password: string = \"\";\n #autoReconnect: boolean = false;\n #wss?: WebSocket = undefined;\n #subscribedTopics: Array<string> = [];\n\n constructor(props: ConnectionProps) {\n this.#url = props.url;\n this.#username = props.username;\n this.#password = props.password;\n this.#autoReconnect = props.autoReconnect ?? false;\n\n this.#_init();\n }\n\n static getInstance(): typeof WebSocketClient {\n return this;\n }\n\n #_init() {\n this.#wss = new WebSocket(this.#url);\n\n this.#wss.onopen = (e: any) => {\n this.onConnect(e);\n if (this.#autoReconnect)\n this.#reSubscribe();\n }\n\n this.#wss.onclose = async (e: any) => {\n if (this.#autoReconnect) {\n await sleep(3000);\n this.#_init();\n }\n this.onDisconnect(e);\n };\n\n this.#wss.onmessage = (m: MessageEvent<any>) => {\n if (this.#wss?.readyState !== WebSocket.OPEN) return;\n\n binaryDecoder(m.data, (payload: SocketReqRes) => {\n switch (payload.event) {\n case \"request-auth\":\n const data: SocketReqRes = {\n topic: undefined,\n event: \"auth\",\n data: {\n username: this.#username,\n password: this.#password,\n }\n }\n this.#_sent(data);\n break;\n\n case \"message\":\n this.onMessage(payload.data, payload.topic!, payload.event);\n break;\n\n default:\n break;\n }\n });\n };\n return this;\n }\n\n #reSubscribe() {\n for (let topic of this.#subscribedTopics)\n this.subscribe(topic);\n }\n\n subscribe(topic: string) {\n const payload: SocketReqRes = {\n topic: topic,\n event: \"subscribe\",\n data: undefined,\n };\n this.#_sent(payload);\n this.#subscribedTopics.push(topic);\n this.#subscribedTopics = [...new Set(this.#subscribedTopics)];\n }\n\n unSubscribe(topic: string) {\n const payload: SocketReqRes = {\n topic: topic,\n event: \"un-subscribe\",\n data: undefined,\n };\n this.#_sent(payload);\n this.#subscribedTopics = this.#subscribedTopics.filter(t => t !== topic);\n }\n\n publish(topic: string,\n options: {\n data: any,\n event?: event,\n }) {\n const { data, event } = options;\n const payload: SocketReqRes = {\n topic: topic,\n event: event ?? \"message\",\n data: data,\n };\n this.#_sent(payload);\n }\n\n async #_sent(data: SocketReqRes) {\n if (this.#wss?.CONNECTING) {\n await sleep();\n this.#_sent(data);\n return;\n }\n\n const encoder = new TextEncoder();\n const binaryData = encoder.encode(JSON.stringify(data));\n this.#wss?.send(binaryData);\n }\n\n disconnect() {\n this.#wss?.close();\n }\n\n onConnect = (e: any) => { };\n onDisconnect = (e: any) => { };\n onMessage = (data: any, topic: string, event: event) => { };\n}\n\nfunction binaryDecoder(blob: Blob, callback: (data: SocketReqRes) => void) {\n const reader = new FileReader();\n reader.onload = () => {\n const json = JSON.parse(reader.result as string);\n callback({\n event: json.event,\n topic: json.topic,\n data: json.data,\n });\n };\n reader.readAsText(blob);\n}\n\nasync function sleep(milli = 1000) {\n return await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(milli);\n }, milli);\n });\n}\n\ntype event =\n | \"auth\"\n | \"request-auth\"\n | \"subscribe\"\n | \"un-subscribe\"\n | \"message\"\n | \"chat\"\n | \"call\"\n | \"notification\"\n | undefined;\n\ninterface SocketReqRes {\n topic: string | undefined,\n event: event\n data: any\n}\n\ninterface ConnectionProps {\n url: string,\n username: string,\n password: string,\n autoReconnect?: boolean\n}\n\nexport default WebSocketClient;\n"],"names":["FileUploadByChunk","constructor","clientId","dirId","uploadUrl","actionUrl","chunkSize","maxConcurrentUpload","_FileUploadByChunk_clientId","set","this","_FileUploadByChunk_dirId","_FileUploadByChunk_isPaused","_FileUploadByChunk_uploadUrl","_FileUploadByChunk_actionUrl","_FileUploadByChunk_chunkSize","_FileUploadByChunk_maxConcurrentUpload","onStatus","data","addEventListener","event","callback","window","e","detail","destroy","removeEventListener","__classPrivateFieldSet","uploadFiles","files","length","fileNames","map","f","encodeURIComponent","name","__classPrivateFieldGet","_FileUploadByChunk_instances","_FileUploadByChunk_init","call","getStatus","_file","totalChunks","chunkProps","_FileUploadByChunk_createChunks","chunkBatch","_FileUploadByChunk_readFileFromChunkAndUpload","undefined","res","http","request","url","method","headers","status","dispatchEvent","CustomEvent","Error","pause","resume","done","id","WeakMap","WeakSet","file","maxChunkSize","_totalChunk","Math","ceil","size","chunkIndex","push","fileName","start","end","_FileUploadByChunk_splitChunksAsBatch","splitBy","Formater","array","splitIntoChunks","_FileUploadByChunk_readFileFromChunk","file_1","chunkBatch_1","__awaiter","arguments","setStatus","onLoad","i","batch","simulateDelay","Promise","all","props","reader","FileReader","resolve","reject","blob","slice","onload","_res","onerror","err","readAsDataURL","_","metaData","_FileUploadByChunk_upload","fileSize","fileType","type","chunk","target","result","toString","ms","setTimeout","WebSocketClient","_WebSocketClient_url","_WebSocketClient_username","_WebSocketClient_password","_WebSocketClient_autoReconnect","_WebSocketClient_wss","_WebSocketClient_subscribedTopics","onConnect","onDisconnect","onMessage","topic","username","password","_a","autoReconnect","_WebSocketClient_instances","_WebSocketClient__init","getInstance","subscribe","payload","_WebSocketClient__sent","Set","unSubscribe","filter","t","publish","options","disconnect","close","sleep","milli","WebSocket","onopen","_WebSocketClient_reSubscribe","onclose","onmessage","m","readyState","OPEN","json","JSON","parse","readAsText","binaryDecoder","CONNECTING","binaryData","TextEncoder","encode","stringify","_b","send"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "personal-ui-framework",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "personal-ui-framework contains simple UI components",
5
5
  "main": "dist/index.js",
6
6
  "exports": {