@wlindabla/file_uploader 1.0.0 → 2.0.1
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.
- package/README.md +54 -28
- package/dist/cjs/cache/index.d.ts +198 -0
- package/dist/cjs/cache/index.js +318 -0
- package/dist/cjs/cache/index.js.map +1 -0
- package/dist/cjs/core/index.d.ts +271 -0
- package/dist/cjs/core/index.js +762 -0
- package/dist/cjs/core/index.js.map +1 -0
- package/dist/cjs/events/chunk/index.d.ts +27 -0
- package/dist/cjs/events/chunk/index.js +70 -0
- package/dist/cjs/events/chunk/index.js.map +1 -0
- package/dist/cjs/events/complete/index.d.ts +64 -0
- package/dist/cjs/events/complete/index.js +152 -0
- package/dist/cjs/events/complete/index.js.map +1 -0
- package/dist/cjs/events/index.d.ts +95 -0
- package/dist/cjs/events/index.js +85 -0
- package/dist/cjs/events/index.js.map +1 -0
- package/dist/cjs/events/initialize/index.d.ts +45 -0
- package/dist/cjs/events/initialize/index.js +105 -0
- package/dist/cjs/events/initialize/index.js.map +1 -0
- package/dist/cjs/events/state/index.d.ts +67 -0
- package/dist/cjs/events/state/index.js +145 -0
- package/dist/cjs/events/state/index.js.map +1 -0
- package/dist/cjs/exceptions/index.d.ts +84 -0
- package/dist/{exceptions → cjs/exceptions}/index.js +38 -18
- package/dist/cjs/exceptions/index.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.js +33 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/subscribers/index.d.ts +34 -0
- package/dist/cjs/subscribers/index.js +187 -0
- package/dist/cjs/subscribers/index.js.map +1 -0
- package/dist/cjs/types/index.d.ts +110 -0
- package/dist/cjs/types/index.js +53 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +72 -0
- package/dist/cjs/utils/index.js +208 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/esm/cache/index.d.mts +198 -0
- package/dist/esm/cache/index.js +4 -0
- package/dist/{index.js.map → esm/cache/index.js.map} +1 -1
- package/dist/{events/initialize/index.js → esm/chunk-3JTTZCSQ.js} +25 -19
- package/dist/esm/chunk-3JTTZCSQ.js.map +1 -0
- package/dist/{events/state/index.js → esm/chunk-6225YMFE.js} +38 -20
- package/dist/esm/chunk-6225YMFE.js.map +1 -0
- package/dist/esm/chunk-7QVYU63E.js +6 -0
- package/dist/esm/chunk-7QVYU63E.js.map +1 -0
- package/dist/{events/complete/index.js → esm/chunk-BNMI7DW3.js} +25 -19
- package/dist/esm/chunk-BNMI7DW3.js.map +1 -0
- package/dist/{subscribers/index.js → esm/chunk-HYNJBWW5.js} +36 -34
- package/dist/esm/chunk-HYNJBWW5.js.map +1 -0
- package/dist/{events/index.js → esm/chunk-JDL3U4OX.js} +7 -37
- package/dist/esm/chunk-JDL3U4OX.js.map +1 -0
- package/dist/{events/chunk/index.js → esm/chunk-LD2DWZRJ.js} +14 -11
- package/dist/esm/chunk-LD2DWZRJ.js.map +1 -0
- package/dist/{utils/index.js → esm/chunk-MFYC4PBP.js} +15 -22
- package/dist/esm/chunk-MFYC4PBP.js.map +1 -0
- package/dist/esm/chunk-NXYS73I4.js +125 -0
- package/dist/esm/chunk-NXYS73I4.js.map +1 -0
- package/dist/{cache/index.js → esm/chunk-PFALORWQ.js} +10 -11
- package/dist/esm/chunk-PFALORWQ.js.map +1 -0
- package/dist/{core/index.js → esm/chunk-TONVXBLH.js} +239 -231
- package/dist/esm/chunk-TONVXBLH.js.map +1 -0
- package/dist/{types/index.js → esm/chunk-X757PBC5.js} +5 -7
- package/dist/esm/chunk-X757PBC5.js.map +1 -0
- package/dist/esm/core/index.d.mts +271 -0
- package/dist/esm/core/index.js +12 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/events/chunk/index.d.mts +27 -0
- package/dist/esm/events/chunk/index.js +4 -0
- package/dist/esm/events/chunk/index.js.map +1 -0
- package/dist/esm/events/complete/index.d.mts +64 -0
- package/dist/esm/events/complete/index.js +4 -0
- package/dist/esm/events/complete/index.js.map +1 -0
- package/dist/esm/events/index.d.mts +95 -0
- package/dist/esm/events/index.js +8 -0
- package/dist/esm/events/index.js.map +1 -0
- package/dist/esm/events/initialize/index.d.mts +45 -0
- package/dist/esm/events/initialize/index.js +4 -0
- package/dist/esm/events/initialize/index.js.map +1 -0
- package/dist/esm/events/state/index.d.mts +67 -0
- package/dist/esm/events/state/index.js +4 -0
- package/dist/esm/events/state/index.js.map +1 -0
- package/dist/esm/exceptions/index.d.mts +84 -0
- package/dist/esm/exceptions/index.js +4 -0
- package/dist/esm/exceptions/index.js.map +1 -0
- package/dist/esm/index.d.mts +14 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/subscribers/index.d.mts +34 -0
- package/dist/esm/subscribers/index.js +10 -0
- package/dist/esm/subscribers/index.js.map +1 -0
- package/dist/esm/types/index.d.mts +110 -0
- package/dist/esm/types/index.js +4 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/utils/index.d.mts +72 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/package.json +165 -14
- package/dist/cache/index.js.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/events/chunk/index.js.map +0 -1
- package/dist/events/complete/index.js.map +0 -1
- package/dist/events/index.js.map +0 -1
- package/dist/events/initialize/index.js.map +0 -1
- package/dist/events/state/index.js.map +0 -1
- package/dist/exceptions/index.js.map +0 -1
- package/dist/index.js +0 -49
- package/dist/subscribers/index.js.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/index.ts"],"sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\nimport {\n ChunkSizeConfig,\n DEFAULT_CONFIG\n} from \"../types\";\n\nexport class FileUtils {\n static readonly MB = 1024 * 1024;\n static readonly GB = 1024 * 1024 * 1024;\n\n static bytesToMB(bytes: number): number {\n return parseFloat((bytes / this.MB).toFixed(2));\n }\n\n static bytesToGB(bytes: number): number {\n return parseFloat((bytes / this.GB).toFixed(2));\n }\n\n static formatBytes(bytes: number): string {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n }\n\n static formatDuration(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const minutes = Math.floor((seconds % 3600) / 60);\n const secs = Math.floor(seconds % 60);\n\n if (hours > 0) return `${hours}h ${minutes}m ${secs}s`;\n if (minutes > 0) return `${minutes}m ${secs}s`;\n return `${secs}s`;\n }\n\n static calculateChunkSize(\n fileSize: number,\n speedMbps?: number,\n config: ChunkSizeConfig = DEFAULT_CONFIG\n ): number {\n const fileSizeMB = fileSize / this.MB;\n\n // Handle slow connections\n if (speedMbps && speedMbps < config.slowSpeedThresholdMbps) {\n return Math.min(\n config.defaultChunkSizeMB * this.MB,\n config.slowSpeedChunkSizeMB * this.MB\n );\n }\n\n // Adjust based on file size\n for (const threshold of config.fileSizeThresholds) {\n if (fileSizeMB <= threshold.maxSizeMB) {\n return threshold.chunkSizeMB * this.MB;\n }\n }\n\n return config.defaultChunkSizeMB * this.MB;\n }\n\n static generateFileHash(file: File|Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async (e) => {\n try {\n const buffer = e.target?.result as ArrayBuffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer.slice(0, 1024 * 1024));\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(file.slice(0, 1024 * 1024)); // Hash first 1MB\n });\n }\n}\n\nexport function updateProgressBarHTMLNotified(\n progress: number,\n media_id: number,\n filename: string,\n providerName = \"LocalVideo\"\n): string {\n const progressBarId = `progress-bar-item_${providerName}_${media_id}`;\n // On cherche la barre de progression interne (celle qui a la classe .progress-bar)\n const progressBarContainer = document.querySelector(`#${progressBarId}`);\n const progressBarInner = progressBarContainer?.querySelector('.progress-bar') as HTMLElement;\n\n if (progressBarInner) {\n // Mise à jour du DOM existant\n const roundedProgress = Math.round(progress);\n progressBarInner.style.width = `${progress}%`;\n progressBarInner.setAttribute('aria-valuenow', progress.toString());\n progressBarInner.innerText = `${roundedProgress}%`;\n\n return progressBarContainer!.innerHTML;\n } else {\n // Génération du template initial\n return `\n <div id=\"${progressBarId}\" class=\"mb-2\" style=\"width:100%;\">\n <small class=\"control-label text-dark fw-bolder filename-label w-100 d-block text-truncate\" title=\"${filename}\">\n ${filename}\n </small>\n <div class=\"progress\">\n <div class=\"progress-bar bg-success progress-bar-striped progress-bar-animated\"\n role=\"progressbar\"\n style=\"width: ${progress}%;\"\n aria-valuenow=\"${progress}\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\">${Math.round(progress)}%</div>\n </div>\n </div>`;\n }\n}\n\n/**\n * Options for creating chunk FormData\n */\nexport interface ChunkFormDataOptions {\n chunkIndex: number;\n totalChunks: number;\n mediaId: string;\n fileName: string;\n fileSize: number;\n fileHash: string;\n metadata?: Record<string, string | Blob>;\n}\n\n/**\n * Creates FormData for uploading a single file chunk.\n * \n * @param chunk - The chunk blob to upload\n * @param options - Chunk upload options\n * @returns FormData ready to be sent to the server\n * \n * @example\n * ```typescript\n * const formData = createChunkFormData(blob, {\n * chunkIndex: 5,\n * totalChunks: 10,\n * mediaId: 'abc123',\n * fileName: 'video.mp4',\n * fileSize: 104857600,\n * fileHash: 'sha256...'\n * });\n * ```\n */\nexport function createChunkFormData(\n chunk: Blob,\n options: ChunkFormDataOptions\n): FormData {\n const formData = new FormData();\n\n // Chunk data\n formData.append('chunk', chunk);\n formData.append('chunkIndex', options.chunkIndex.toString());\n formData.append('chunkSize', chunk.size.toString());\n formData.append('totalChunks', options.totalChunks.toString());\n\n // File metadata\n formData.append('fileName', options.fileName);\n formData.append('fileSize', options.fileSize.toString());\n formData.append('fileHash', options.fileHash);\n\n // Media ID (returned by server after metadata registration)\n formData.append('mediaId', options.mediaId);\n\n // Optional additional data\n if (options.metadata) {\n for (const [key, value] of Object.entries(options.metadata)) {\n if (typeof value === 'string' || value instanceof Blob) {\n formData.append(key, value);\n }\n }\n }\n\n return formData;\n}\n\n/**\n * Builder pattern for creating chunk FormData with fluent API.\n */\nexport class ChunkFormDataBuilder {\n private formData: FormData ;\n\n constructor(chunk: Blob) {\n this.formData = new FormData();\n\n this.formData.append('chunk', chunk);\n this.formData.append('chunkSize', chunk.size.toString());\n }\n\n withChunkInfo(chunkIndex: number, totalChunks: number): this {\n this.formData.append('chunkIndex', chunkIndex.toString());\n this.formData.append('totalChunks', totalChunks.toString());\n return this;\n }\n\n withFileInfo(fileName: string, fileSize: number, fileHash: string): this {\n this.formData.append('fileName', fileName);\n this.formData.append('fileSize', fileSize.toString());\n this.formData.append('fileHash', fileHash);\n return this;\n }\n\n withSessionId(sessionId: string): this {\n this.formData.append('sessionId', sessionId);\n return this;\n }\n\n withMetadata(metadata: Record<string, string | Blob>): this {\n for (const [key, value] of Object.entries(metadata)) {\n if (typeof value === 'string' || value instanceof Blob) {\n this.formData.append(key, value);\n }\n }\n return this;\n }\n\n build(): FormData {\n return this.formData;\n }\n}\n\n// Stratégie de retry configurable\ninterface RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number, error: Error): boolean;\n getDelay(attempt: number): number;\n}\n\nexport class ExponentialBackoffStrategy implements RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number): boolean {\n return attempt < maxRetries;\n }\n\n getDelay(attempt: number): number {\n return Math.pow(2, attempt) * 1000;\n }\n}\n\nexport class LinearBackoffStrategy implements RetryStrategyInterface {\n shouldRetry(attempt: number, maxRetries: number): boolean {\n return attempt < maxRetries;\n }\n\n getDelay(attempt: number): number {\n return (attempt + 1) * 1000; // 1s, 2s, 3s...\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,mBAGO;AAEA,MAAM,UAAU;AAAA,EAfvB,OAeuB;AAAA;AAAA;AAAA,EACnB,OAAgB,KAAK,OAAO;AAAA,EAC5B,OAAgB,KAAK,OAAO,OAAO;AAAA,EAEnC,OAAO,UAAU,OAAuB;AACpC,WAAO,YAAY,QAAQ,KAAK,IAAI,QAAQ,CAAC,CAAC;AAAA,EAClD;AAAA,EAEA,OAAO,UAAU,OAAuB;AACpC,WAAO,YAAY,QAAQ,KAAK,IAAI,QAAQ,CAAC,CAAC;AAAA,EAClD;AAAA,EAEA,OAAO,YAAY,OAAuB;AACtC,QAAI,UAAU,EAAG,QAAO;AACxB,UAAM,IAAI;AACV,UAAM,QAAQ,CAAC,SAAS,MAAM,MAAM,MAAM,IAAI;AAC9C,UAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,WAAO,YAAY,QAAQ,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,MAAM,MAAM,CAAC;AAAA,EAC1E;AAAA,EAEA,OAAO,eAAe,SAAyB;AAC3C,UAAM,QAAQ,KAAK,MAAM,UAAU,IAAI;AACvC,UAAM,UAAU,KAAK,MAAO,UAAU,OAAQ,EAAE;AAChD,UAAM,OAAO,KAAK,MAAM,UAAU,EAAE;AAEpC,QAAI,QAAQ,EAAG,QAAO,GAAG,KAAK,KAAK,OAAO,KAAK,IAAI;AACnD,QAAI,UAAU,EAAG,QAAO,GAAG,OAAO,KAAK,IAAI;AAC3C,WAAO,GAAG,IAAI;AAAA,EAClB;AAAA,EAEA,OAAO,mBACH,UACA,WACA,SAA0B,6BACpB;AACN,UAAM,aAAa,WAAW,KAAK;AAGnC,QAAI,aAAa,YAAY,OAAO,wBAAwB;AACxD,aAAO,KAAK;AAAA,QACR,OAAO,qBAAqB,KAAK;AAAA,QACjC,OAAO,uBAAuB,KAAK;AAAA,MACvC;AAAA,IACJ;AAGA,eAAW,aAAa,OAAO,oBAAoB;AAC/C,UAAI,cAAc,UAAU,WAAW;AACnC,eAAO,UAAU,cAAc,KAAK;AAAA,MACxC;AAAA,IACJ;AAEA,WAAO,OAAO,qBAAqB,KAAK;AAAA,EAC5C;AAAA,EAEA,OAAO,iBAAiB,MAAkC;AACtD,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,YAAM,SAAS,IAAI,WAAW;AAC9B,aAAO,SAAS,OAAO,MAAM;AACzB,YAAI;AACA,gBAAM,SAAS,EAAE,QAAQ;AACzB,gBAAM,aAAa,MAAM,OAAO,OAAO,OAAO,WAAW,OAAO,MAAM,GAAG,OAAO,IAAI,CAAC;AACrF,gBAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC;AACvD,gBAAM,UAAU,UAAU,IAAI,OAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC3E,kBAAQ,OAAO;AAAA,QACnB,SAAS,OAAO;AACZ,iBAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AACA,aAAO,UAAU;AACjB,aAAO,kBAAkB,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC;AAAA,IACvD,CAAC;AAAA,EACL;AACJ;AAEO,SAAS,8BACZ,UACA,UACA,UACA,eAAe,cACT;AACN,QAAM,gBAAgB,qBAAqB,YAAY,IAAI,QAAQ;AAEnE,QAAM,uBAAuB,SAAS,cAAc,IAAI,aAAa,EAAE;AACvE,QAAM,mBAAmB,sBAAsB,cAAc,eAAe;AAE5E,MAAI,kBAAkB;AAElB,UAAM,kBAAkB,KAAK,MAAM,QAAQ;AAC3C,qBAAiB,MAAM,QAAQ,GAAG,QAAQ;AAC1C,qBAAiB,aAAa,iBAAiB,SAAS,SAAS,CAAC;AAClE,qBAAiB,YAAY,GAAG,eAAe;AAE/C,WAAO,qBAAsB;AAAA,EACjC,OAAO;AAEH,WAAO;AAAA,uBACQ,aAAa;AAAA,qHACiF,QAAQ;AAAA,sBACvG,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,yCAKW,QAAQ;AAAA,0CACP,QAAQ;AAAA;AAAA,+CAEH,KAAK,MAAM,QAAQ,CAAC;AAAA;AAAA;AAAA,EAG/D;AACJ;AApCgB;AAsET,SAAS,oBACZ,OACA,SACQ;AACR,QAAM,WAAW,IAAI,SAAS;AAG9B,WAAS,OAAO,SAAS,KAAK;AAC9B,WAAS,OAAO,cAAc,QAAQ,WAAW,SAAS,CAAC;AAC3D,WAAS,OAAO,aAAa,MAAM,KAAK,SAAS,CAAC;AAClD,WAAS,OAAO,eAAe,QAAQ,YAAY,SAAS,CAAC;AAG7D,WAAS,OAAO,YAAY,QAAQ,QAAQ;AAC5C,WAAS,OAAO,YAAY,QAAQ,SAAS,SAAS,CAAC;AACvD,WAAS,OAAO,YAAY,QAAQ,QAAQ;AAG5C,WAAS,OAAO,WAAW,QAAQ,OAAO;AAG1C,MAAI,QAAQ,UAAU;AAClB,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AACzD,UAAI,OAAO,UAAU,YAAY,iBAAiB,MAAM;AACpD,iBAAS,OAAO,KAAK,KAAK;AAAA,MAC9B;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AA9BgB;AAmCT,MAAM,qBAAqB;AAAA,EAnMlC,OAmMkC;AAAA;AAAA;AAAA,EACtB;AAAA,EAER,YAAY,OAAa;AACrB,SAAK,WAAW,IAAI,SAAS;AAE7B,SAAK,SAAS,OAAO,SAAS,KAAK;AACnC,SAAK,SAAS,OAAO,aAAa,MAAM,KAAK,SAAS,CAAC;AAAA,EAC3D;AAAA,EAEA,cAAc,YAAoB,aAA2B;AACzD,SAAK,SAAS,OAAO,cAAc,WAAW,SAAS,CAAC;AACxD,SAAK,SAAS,OAAO,eAAe,YAAY,SAAS,CAAC;AAC1D,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,UAAkB,UAAkB,UAAwB;AACrE,SAAK,SAAS,OAAO,YAAY,QAAQ;AACzC,SAAK,SAAS,OAAO,YAAY,SAAS,SAAS,CAAC;AACpD,SAAK,SAAS,OAAO,YAAY,QAAQ;AACzC,WAAO;AAAA,EACX;AAAA,EAEA,cAAc,WAAyB;AACnC,SAAK,SAAS,OAAO,aAAa,SAAS;AAC3C,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,UAA+C;AACxD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACjD,UAAI,OAAO,UAAU,YAAY,iBAAiB,MAAM;AACpD,aAAK,SAAS,OAAO,KAAK,KAAK;AAAA,MACnC;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,QAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AACJ;AAQO,MAAM,2BAA6D;AAAA,EAnP1E,OAmP0E;AAAA;AAAA;AAAA,EACtE,YAAY,SAAiB,YAA6B;AACtD,WAAO,UAAU;AAAA,EACrB;AAAA,EAEA,SAAS,SAAyB;AAC9B,WAAO,KAAK,IAAI,GAAG,OAAO,IAAI;AAAA,EAClC;AACJ;AAEO,MAAM,sBAAwD;AAAA,EA7PrE,OA6PqE;AAAA;AAAA;AAAA,EACjE,YAAY,SAAiB,YAA6B;AACtD,WAAO,UAAU;AAAA,EACrB;AAAA,EAEA,SAAS,SAAyB;AAC9B,YAAQ,UAAU,KAAK;AAAA,EAC3B;AACJ;","names":[]}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { ResumeData } from '../types/index.mjs';
|
|
2
|
+
import '@wlindabla/http_client';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Interface for caching upload resume data.
|
|
6
|
+
*
|
|
7
|
+
* This interface extends the base cache functionality to specifically
|
|
8
|
+
* handle resume data for file uploads, allowing uploads to be paused
|
|
9
|
+
* and resumed across browser sessions.
|
|
10
|
+
*
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const cache: UploadResumeCacheInterface = new LocalStorageUploadResumeCache();
|
|
15
|
+
*
|
|
16
|
+
* // Save progress
|
|
17
|
+
* await cache.setItem('video.mp4', {
|
|
18
|
+
* uploadedChunks: 45,
|
|
19
|
+
* totalChunks: 100,
|
|
20
|
+
* lastBytePosition: 47185920
|
|
21
|
+
* });
|
|
22
|
+
*
|
|
23
|
+
* // Resume later
|
|
24
|
+
* const data = await cache.getItem('video.mp4');
|
|
25
|
+
* console.log(`Resume from chunk ${data.uploadedChunks}`);
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
interface UploadResumeCacheInterface {
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves cached resume data for a specific upload.
|
|
31
|
+
*
|
|
32
|
+
* @param key - Unique identifier for the upload (typically filename or file hash)
|
|
33
|
+
* @returns Promise resolving to the cached resume data
|
|
34
|
+
* @throws {Error} If the key doesn't exist or data is corrupted
|
|
35
|
+
*/
|
|
36
|
+
getItem(key: string): Promise<ResumeData>;
|
|
37
|
+
/**
|
|
38
|
+
* Stores resume data for an upload session.
|
|
39
|
+
*
|
|
40
|
+
* @param key - Unique identifier for the upload
|
|
41
|
+
* @param data - Resume data containing upload progress information
|
|
42
|
+
* @returns Promise that resolves when data is successfully cached
|
|
43
|
+
* @throws {Error} If storage quota is exceeded or data is invalid
|
|
44
|
+
*/
|
|
45
|
+
setItem(key: string, data: ResumeData): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Default adapter for caching resume data during file uploads.
|
|
49
|
+
*
|
|
50
|
+
* Implements an in-memory storage strategy with secure serialization,
|
|
51
|
+
* strict data validation, and comprehensive error handling.
|
|
52
|
+
*
|
|
53
|
+
* This implementation serves as a foundation for specialized adapters
|
|
54
|
+
* (localStorage, IndexedDB, sessionStorage, etc.).
|
|
55
|
+
*
|
|
56
|
+
* @implements {UploadResumeCacheInterface}
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const adapter = new DefaultUploadResumeCacheAdapter();
|
|
61
|
+
*
|
|
62
|
+
* // Save resume data
|
|
63
|
+
* await adapter.setItem('upload-123', {
|
|
64
|
+
* fileId: 'file-abc',
|
|
65
|
+
* fileName: 'document.pdf',
|
|
66
|
+
* fileSize: 5242880,
|
|
67
|
+
* uploadedChunks: 12,
|
|
68
|
+
* lastChunkIndex: 11,
|
|
69
|
+
* lastBytePosition: 1258291,
|
|
70
|
+
* chunkSize: 1048576
|
|
71
|
+
* });
|
|
72
|
+
*
|
|
73
|
+
* // Retrieve and resume
|
|
74
|
+
* const resumeData = await adapter.getItem('upload-123');
|
|
75
|
+
* console.log(`Resume from chunk ${resumeData.uploadedChunks}`);
|
|
76
|
+
*
|
|
77
|
+
* // Remove specific item
|
|
78
|
+
* await adapter.removeItem('upload-123');
|
|
79
|
+
*
|
|
80
|
+
* // Clear all cache
|
|
81
|
+
* await adapter.clear();
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
declare class DefaultUploadResumeCacheAdapter implements UploadResumeCacheInterface {
|
|
85
|
+
private cache;
|
|
86
|
+
private readonly maxCacheSize;
|
|
87
|
+
constructor();
|
|
88
|
+
/**
|
|
89
|
+
* Validates that the runtime environment is appropriate.
|
|
90
|
+
*
|
|
91
|
+
* @private
|
|
92
|
+
* @throws {UploadCacheError} If the environment is incompatible
|
|
93
|
+
*/
|
|
94
|
+
private validateEnvironment;
|
|
95
|
+
/**
|
|
96
|
+
* Validates resume data according to strict criteria.
|
|
97
|
+
*
|
|
98
|
+
* @private
|
|
99
|
+
* @param data - The data to validate
|
|
100
|
+
* @throws {UploadCacheError} If the data is invalid
|
|
101
|
+
*/
|
|
102
|
+
private validateResumeData;
|
|
103
|
+
/**
|
|
104
|
+
* Retrieves resume data for a specific upload.
|
|
105
|
+
*
|
|
106
|
+
* @param key - Unique identifier for the upload
|
|
107
|
+
* @returns Promise resolved with the resume data
|
|
108
|
+
* @throws {UploadCacheError} If the key does not exist or data is corrupted
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* try {
|
|
113
|
+
* const data = await adapter.getItem('upload-123');
|
|
114
|
+
* console.log(`${data.uploadedChunks}/${Math.ceil(data.fileSize / data.chunkSize)} chunks`);
|
|
115
|
+
* } catch (error) {
|
|
116
|
+
* console.error('Failed to retrieve data:', error.message);
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
getItem(key: string): Promise<ResumeData>;
|
|
121
|
+
/**
|
|
122
|
+
* Stores resume data for an upload session.
|
|
123
|
+
*
|
|
124
|
+
* @param key - Unique identifier for the upload
|
|
125
|
+
* @param data - Resume data containing upload progress information
|
|
126
|
+
* @returns Promise resolved when data is successfully cached
|
|
127
|
+
* @throws {UploadCacheError} If quota is exceeded or data is invalid
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* try {
|
|
132
|
+
* await adapter.setItem('upload-123', {
|
|
133
|
+
* fileId: 'file-abc',
|
|
134
|
+
* fileName: 'video.mp4',
|
|
135
|
+
* fileSize: 10737418240,
|
|
136
|
+
* uploadedChunks: 45,
|
|
137
|
+
* lastChunkIndex: 44,
|
|
138
|
+
* lastBytePosition: 47185920,
|
|
139
|
+
* chunkSize: 1048576
|
|
140
|
+
* });
|
|
141
|
+
* console.log('Data successfully saved');
|
|
142
|
+
* } catch (error) {
|
|
143
|
+
* console.error('Storage error:', error.message);
|
|
144
|
+
* }
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
setItem(key: string, data: ResumeData): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* Removes resume data for a specific upload.
|
|
150
|
+
*
|
|
151
|
+
* @param key - Unique identifier for the upload
|
|
152
|
+
* @returns Promise resolved after removal
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* await adapter.removeItem('upload-123');
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
removeItem(key: string): Promise<void>;
|
|
160
|
+
/**
|
|
161
|
+
* Clears all cached resume data.
|
|
162
|
+
*
|
|
163
|
+
* @returns Promise resolved after complete cleanup
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* await adapter.clear();
|
|
168
|
+
* console.log('Cache cleared');
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
clear(): Promise<void>;
|
|
172
|
+
/**
|
|
173
|
+
* Returns the number of entries currently in cache.
|
|
174
|
+
*
|
|
175
|
+
* @returns Number of cache entries
|
|
176
|
+
*/
|
|
177
|
+
get size(): number;
|
|
178
|
+
/**
|
|
179
|
+
* Returns cache usage as a percentage.
|
|
180
|
+
*
|
|
181
|
+
* @returns Usage percentage (0-100)
|
|
182
|
+
*/
|
|
183
|
+
get usage(): number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Custom error for upload cache operations.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* throw new UploadCacheError('Resume data not found', 'NOT_FOUND');
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
declare class UploadCacheError extends Error {
|
|
194
|
+
readonly code: string;
|
|
195
|
+
constructor(message: string, code: string);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export { DefaultUploadResumeCacheAdapter, UploadCacheError, type UploadResumeCacheInterface };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { __name } from './chunk-7QVYU63E.js';
|
|
2
|
+
import { BaseEvent } from '@wlindabla/event_dispatcher';
|
|
2
3
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
class InitializingUploadEvent extends event_dispatcher.BaseEvent {
|
|
4
|
+
var InitializingUploadEvent = class extends BaseEvent {
|
|
8
5
|
constructor(initUploadOptions) {
|
|
9
6
|
super();
|
|
10
7
|
this.initUploadOptions = initUploadOptions;
|
|
11
8
|
this._mediaId = null;
|
|
12
9
|
}
|
|
10
|
+
initUploadOptions;
|
|
13
11
|
static {
|
|
14
12
|
__name(this, "InitializingUploadEvent");
|
|
15
13
|
}
|
|
@@ -25,30 +23,36 @@ class InitializingUploadEvent extends event_dispatcher.BaseEvent {
|
|
|
25
23
|
}
|
|
26
24
|
return this._mediaId;
|
|
27
25
|
}
|
|
28
|
-
}
|
|
29
|
-
|
|
26
|
+
};
|
|
27
|
+
var InitializeUploadStartedEvent = class extends BaseEvent {
|
|
30
28
|
constructor(fileName, fileSize, fileHash) {
|
|
31
29
|
super();
|
|
32
30
|
this.fileName = fileName;
|
|
33
31
|
this.fileSize = fileSize;
|
|
34
32
|
this.fileHash = fileHash;
|
|
35
33
|
}
|
|
34
|
+
fileName;
|
|
35
|
+
fileSize;
|
|
36
|
+
fileHash;
|
|
36
37
|
static {
|
|
37
38
|
__name(this, "InitializeUploadStartedEvent");
|
|
38
39
|
}
|
|
39
|
-
}
|
|
40
|
-
|
|
40
|
+
};
|
|
41
|
+
var InitializeUploadSuccessEvent = class extends BaseEvent {
|
|
41
42
|
constructor(status, sessionId, responseData) {
|
|
42
43
|
super();
|
|
43
44
|
this.status = status;
|
|
44
45
|
this.sessionId = sessionId;
|
|
45
46
|
this.responseData = responseData;
|
|
46
47
|
}
|
|
48
|
+
status;
|
|
49
|
+
sessionId;
|
|
50
|
+
responseData;
|
|
47
51
|
static {
|
|
48
52
|
__name(this, "InitializeUploadSuccessEvent");
|
|
49
53
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
54
|
+
};
|
|
55
|
+
var InitializeUploadFailureEvent = class extends BaseEvent {
|
|
52
56
|
constructor(error, status, errorData, responseData, isNetworkError) {
|
|
53
57
|
super();
|
|
54
58
|
this.error = error;
|
|
@@ -57,14 +61,16 @@ class InitializeUploadFailureEvent extends event_dispatcher.BaseEvent {
|
|
|
57
61
|
this.responseData = responseData;
|
|
58
62
|
this.isNetworkError = isNetworkError;
|
|
59
63
|
}
|
|
64
|
+
error;
|
|
65
|
+
status;
|
|
66
|
+
errorData;
|
|
67
|
+
responseData;
|
|
68
|
+
isNetworkError;
|
|
60
69
|
static {
|
|
61
70
|
__name(this, "InitializeUploadFailureEvent");
|
|
62
71
|
}
|
|
63
|
-
}
|
|
72
|
+
};
|
|
64
73
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
exports.InitializingUploadEvent = InitializingUploadEvent;
|
|
69
|
-
//# sourceMappingURL=index.js.map
|
|
70
|
-
//# sourceMappingURL=index.js.map
|
|
74
|
+
export { InitializeUploadFailureEvent, InitializeUploadStartedEvent, InitializeUploadSuccessEvent, InitializingUploadEvent };
|
|
75
|
+
//# sourceMappingURL=chunk-3JTTZCSQ.js.map
|
|
76
|
+
//# sourceMappingURL=chunk-3JTTZCSQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/initialize/index.ts"],"names":[],"mappings":";;;AAqBO,IAAM,uBAAA,GAAN,cAAsC,SAAA,CAAS;AAAA,EAElD,YACoB,iBAAA,EAClB;AACE,IAAA,KAAA,EAAM;AAFU,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA;AAGhB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EACpB;AAAA,EAJoB,iBAAA;AAAA,EAxBxB;AAqBsD,IAAA,MAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AAAA;AAAA,EAC1C,QAAA;AAAA,EAQD,WAAW,cAAA,EAAwB;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,cAAA;AAAA,EACpB;AAAA,EAEA,IAAW,OAAA,GAAkB;AACzB,IAAA,IAAI,IAAA,CAAK,aAAa,IAAA,EAAM;AACxB,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OAGJ;AAAA,IACJ;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EAChB;AACJ;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAU;AAAA,EACxD,WAAA,CACoB,QAAA,EACA,QAAA,EACA,QAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AAHU,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AAAA,EACP;AAAA,EAHO,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EArDxB;AAiD4D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAM5D;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAS;AAAA,EACvD,WAAA,CACoB,MAAA,EACA,SAAA,EACA,YAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AAHU,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AAAA,EACP;AAAA,EAHO,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EAhExB;AA4D2D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAM3D;AAKO,IAAM,4BAAA,GAAN,cAA2C,SAAA,CAAU;AAAA,EACxD,WAAA,CACoB,KAAA,EACA,MAAA,EACA,SAAA,EACA,cACA,cAAA,EAClB;AAAE,IAAA,KAAA,EAAM;AALU,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,cAAA,GAAA,cAAA;AAAA,EACP;AAAA,EALO,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EA7ExB;AAuE4D,IAAA,MAAA,CAAA,IAAA,EAAA,8BAAA,CAAA;AAAA;AAQ5D","file":"chunk-3JTTZCSQ.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\n\nimport {\n InitializeUploadOptions,\n InitializeUploadResponse\n} from \"../../types\";\n\nimport { BaseEvent } from \"@wlindabla/event_dispatcher\";\n\n/**\n * Event data for Upload State INITIALIZE\n */\nexport class InitializingUploadEvent extends BaseEvent{\n private _mediaId: string | null;\n constructor(\n public readonly initUploadOptions: InitializeUploadOptions\n ) {\n super();\n this._mediaId = null;\n } \n\n public setMediaId(_mediaUploadId: string) {\n this._mediaId = _mediaUploadId;\n }\n\n public get mediaId(): string {\n if (this._mediaId === null) {\n throw new Error(\n 'MediaId has not been set. ' +\n 'This likely means the InitializeUploadSubscriber failed. ' +\n 'Check that INITIALIZE_UPLOAD event was properly handled.'\n );\n }\n return this._mediaId;\n }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_STARTED\n */\nexport class InitializeUploadStartedEvent extends BaseEvent {\n constructor(\n public readonly fileName: string,\n public readonly fileSize: number,\n public readonly fileHash: string\n ) { super(); }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_SUCCESS\n */\nexport class InitializeUploadSuccessEvent extends BaseEvent{\n constructor(\n public readonly status: number,\n public readonly sessionId: string,\n public readonly responseData: InitializeUploadResponse\n ) { super(); }\n}\n\n/**\n * Event data for INITIALIZE_UPLOAD_FAILURE\n */\nexport class InitializeUploadFailureEvent extends BaseEvent {\n constructor(\n public readonly error: Error,\n public readonly status?: number,\n public readonly errorData?: any,\n public readonly responseData?: any,\n public readonly isNetworkError?: boolean\n ) { super(); }\n}\n\n"]}
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import { __name } from './chunk-7QVYU63E.js';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
class UploadStateChangedEvent {
|
|
3
|
+
// src/events/state/index.ts
|
|
4
|
+
var UploadStateChangedEvent = class {
|
|
6
5
|
constructor(oldState, newState, changedAt = Date.now()) {
|
|
7
6
|
this.oldState = oldState;
|
|
8
7
|
this.newState = newState;
|
|
9
8
|
this.changedAt = changedAt;
|
|
10
9
|
}
|
|
10
|
+
oldState;
|
|
11
|
+
newState;
|
|
12
|
+
changedAt;
|
|
11
13
|
static {
|
|
12
14
|
__name(this, "UploadStateChangedEvent");
|
|
13
15
|
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
+
};
|
|
17
|
+
var UploadCancelledEvent = class {
|
|
16
18
|
constructor(mediaName, totalChunks, uploadedBytes, percentage, currentChunkIndex, message = "Upload cancelled by user", cancelledAt = Date.now()) {
|
|
17
19
|
this.mediaName = mediaName;
|
|
18
20
|
this.totalChunks = totalChunks;
|
|
@@ -22,11 +24,18 @@ class UploadCancelledEvent {
|
|
|
22
24
|
this.message = message;
|
|
23
25
|
this.cancelledAt = cancelledAt;
|
|
24
26
|
}
|
|
27
|
+
mediaName;
|
|
28
|
+
totalChunks;
|
|
29
|
+
uploadedBytes;
|
|
30
|
+
percentage;
|
|
31
|
+
currentChunkIndex;
|
|
32
|
+
message;
|
|
33
|
+
cancelledAt;
|
|
25
34
|
static {
|
|
26
35
|
__name(this, "UploadCancelledEvent");
|
|
27
36
|
}
|
|
28
|
-
}
|
|
29
|
-
|
|
37
|
+
};
|
|
38
|
+
var UploadResumedEvent = class {
|
|
30
39
|
constructor(mediaName, totalChunks, uploadedBytes, percentage, resumedAt = Date.now()) {
|
|
31
40
|
this.mediaName = mediaName;
|
|
32
41
|
this.totalChunks = totalChunks;
|
|
@@ -34,11 +43,16 @@ class UploadResumedEvent {
|
|
|
34
43
|
this.percentage = percentage;
|
|
35
44
|
this.resumedAt = resumedAt;
|
|
36
45
|
}
|
|
46
|
+
mediaName;
|
|
47
|
+
totalChunks;
|
|
48
|
+
uploadedBytes;
|
|
49
|
+
percentage;
|
|
50
|
+
resumedAt;
|
|
37
51
|
static {
|
|
38
52
|
__name(this, "UploadResumedEvent");
|
|
39
53
|
}
|
|
40
|
-
}
|
|
41
|
-
|
|
54
|
+
};
|
|
55
|
+
var UploadPausedEvent = class {
|
|
42
56
|
constructor(mediaName, totalChunks, uploadedBytes, percentage, pausedAt = Date.now()) {
|
|
43
57
|
this.mediaName = mediaName;
|
|
44
58
|
this.totalChunks = totalChunks;
|
|
@@ -46,16 +60,24 @@ class UploadPausedEvent {
|
|
|
46
60
|
this.percentage = percentage;
|
|
47
61
|
this.pausedAt = pausedAt;
|
|
48
62
|
}
|
|
63
|
+
mediaName;
|
|
64
|
+
totalChunks;
|
|
65
|
+
uploadedBytes;
|
|
66
|
+
percentage;
|
|
67
|
+
pausedAt;
|
|
49
68
|
static {
|
|
50
69
|
__name(this, "UploadPausedEvent");
|
|
51
70
|
}
|
|
52
|
-
}
|
|
53
|
-
|
|
71
|
+
};
|
|
72
|
+
var UploadProgressEvent = class {
|
|
54
73
|
constructor(uploadProgress, responseData, httpStatus) {
|
|
55
74
|
this.uploadProgress = uploadProgress;
|
|
56
75
|
this.responseData = responseData;
|
|
57
76
|
this.httpStatus = httpStatus;
|
|
58
77
|
}
|
|
78
|
+
uploadProgress;
|
|
79
|
+
responseData;
|
|
80
|
+
httpStatus;
|
|
59
81
|
static {
|
|
60
82
|
__name(this, "UploadProgressEvent");
|
|
61
83
|
}
|
|
@@ -86,12 +108,8 @@ class UploadProgressEvent {
|
|
|
86
108
|
get elapsed() {
|
|
87
109
|
return this.uploadProgress.elapsed;
|
|
88
110
|
}
|
|
89
|
-
}
|
|
111
|
+
};
|
|
90
112
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
exports.UploadResumedEvent = UploadResumedEvent;
|
|
95
|
-
exports.UploadStateChangedEvent = UploadStateChangedEvent;
|
|
96
|
-
//# sourceMappingURL=index.js.map
|
|
97
|
-
//# sourceMappingURL=index.js.map
|
|
113
|
+
export { UploadCancelledEvent, UploadPausedEvent, UploadProgressEvent, UploadResumedEvent, UploadStateChangedEvent };
|
|
114
|
+
//# sourceMappingURL=chunk-6225YMFE.js.map
|
|
115
|
+
//# sourceMappingURL=chunk-6225YMFE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/state/index.ts"],"names":[],"mappings":"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","file":"chunk-6225YMFE.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\n\nimport {\n UploadState,\n UploadProgress\n} from \"../../types\";\n\n/**\n * Event data for UPLOAD_STATE_CHANGED\n */\nexport class UploadStateChangedEvent {\n constructor(\n public readonly oldState: UploadState,\n public readonly newState: UploadState,\n public readonly changedAt: number = Date.now()\n ) { }\n}\n\n\n/**\n * Event data for UPLOAD_CANCELLED\n */\nexport class UploadCancelledEvent {\n constructor(\n public readonly mediaName: string,\n public readonly totalChunks: number,\n public readonly uploadedBytes: number,\n public readonly percentage: number,\n public readonly currentChunkIndex:number,\n public readonly message: string =\"Upload cancelled by user\",\n public readonly cancelledAt: number = Date.now()\n ) { }\n}\n\n\n/**\n * Event data for UPLOAD_RESUMED\n */\nexport class UploadResumedEvent {\n constructor(\n public readonly mediaName: string,\n public readonly totalChunks: number,\n public readonly uploadedBytes: number,\n public readonly percentage: number,\n public readonly resumedAt: number = Date.now()\n ) { }\n}\n\n/**\n * Event data for UPLOAD_PAUSED\n */\nexport class UploadPausedEvent {\n constructor(\n public readonly mediaName: string,\n public readonly totalChunks: number,\n public readonly uploadedBytes: number,\n public readonly percentage: number,\n public readonly pausedAt: number = Date.now()\n ) { }\n}\n\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_SUCCESS\n */\nexport class UploadProgressEvent {\n constructor(\n private readonly uploadProgress: UploadProgress,\n public readonly responseData: string | Record<string, string | any> | unknown,\n public readonly httpStatus: number\n ) { }\n\n public get uploadedChunks(): number { return this.uploadProgress.uploadedChunks; }\n\n public get totalChunks(): number { return this.uploadProgress.totalChunks; }\n\n public get percentage(): number { return this.uploadProgress.percentage; }\n\n public get uploadedBytes(): number { return this.uploadProgress.uploadedBytes; }\n\n public get totalBytes(): number { return this.uploadProgress.totalBytes; }\n\n public get currentChunk(): number { return this.uploadProgress.currentChunk; }\n\n public get speed(): number | undefined { return this.uploadProgress.speed; }\n\n public get estimatedTimeRemaining(): number | undefined | null { return this.uploadProgress.estimatedTimeRemaining; }\n\n public get elapsed(): number { return this.uploadProgress.elapsed; }\n}\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7QVYU63E.js"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
import { __name } from './chunk-7QVYU63E.js';
|
|
2
|
+
import { BaseEvent } from '@wlindabla/event_dispatcher';
|
|
2
3
|
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
var __defProp = Object.defineProperty;
|
|
6
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
class ResumeUploadEvent {
|
|
4
|
+
var ResumeUploadEvent = class {
|
|
8
5
|
constructor(__resumeData, message) {
|
|
9
6
|
this.__resumeData = __resumeData;
|
|
10
7
|
this.message = message;
|
|
11
8
|
}
|
|
9
|
+
__resumeData;
|
|
10
|
+
message;
|
|
12
11
|
static {
|
|
13
12
|
__name(this, "ResumeUploadEvent");
|
|
14
13
|
}
|
|
@@ -33,11 +32,12 @@ class ResumeUploadEvent {
|
|
|
33
32
|
get fileSize() {
|
|
34
33
|
return this.__resumeData.fileSize;
|
|
35
34
|
}
|
|
36
|
-
}
|
|
37
|
-
|
|
35
|
+
};
|
|
36
|
+
var UploadMediaCompleteEvent = class {
|
|
38
37
|
constructor(_uploadResult) {
|
|
39
38
|
this._uploadResult = _uploadResult;
|
|
40
39
|
}
|
|
40
|
+
_uploadResult;
|
|
41
41
|
static {
|
|
42
42
|
__name(this, "UploadMediaCompleteEvent");
|
|
43
43
|
}
|
|
@@ -62,8 +62,8 @@ class UploadMediaCompleteEvent {
|
|
|
62
62
|
get averageSpeed() {
|
|
63
63
|
return this._uploadResult.averageSpeed;
|
|
64
64
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
65
|
+
};
|
|
66
|
+
var FinalizeUploadFailureEvent = class extends BaseEvent {
|
|
67
67
|
constructor(error, status, errorData, responseData, isNetworkError) {
|
|
68
68
|
super();
|
|
69
69
|
this.error = error;
|
|
@@ -72,11 +72,16 @@ class FinalizeUploadFailureEvent extends event_dispatcher.BaseEvent {
|
|
|
72
72
|
this.responseData = responseData;
|
|
73
73
|
this.isNetworkError = isNetworkError;
|
|
74
74
|
}
|
|
75
|
+
error;
|
|
76
|
+
status;
|
|
77
|
+
errorData;
|
|
78
|
+
responseData;
|
|
79
|
+
isNetworkError;
|
|
75
80
|
static {
|
|
76
81
|
__name(this, "FinalizeUploadFailureEvent");
|
|
77
82
|
}
|
|
78
|
-
}
|
|
79
|
-
|
|
83
|
+
};
|
|
84
|
+
var FinalizeUploadEvent = class extends BaseEvent {
|
|
80
85
|
constructor(endPoint, mediaId, mediaHash, headers) {
|
|
81
86
|
super();
|
|
82
87
|
this.endPoint = endPoint;
|
|
@@ -85,6 +90,10 @@ class FinalizeUploadEvent extends event_dispatcher.BaseEvent {
|
|
|
85
90
|
this.headers = headers;
|
|
86
91
|
this.fetchResponse = null;
|
|
87
92
|
}
|
|
93
|
+
endPoint;
|
|
94
|
+
mediaId;
|
|
95
|
+
mediaHash;
|
|
96
|
+
headers;
|
|
88
97
|
static {
|
|
89
98
|
__name(this, "FinalizeUploadEvent");
|
|
90
99
|
}
|
|
@@ -107,11 +116,8 @@ class FinalizeUploadEvent extends event_dispatcher.BaseEvent {
|
|
|
107
116
|
hasResponse() {
|
|
108
117
|
return this.fetchResponse !== null;
|
|
109
118
|
}
|
|
110
|
-
}
|
|
119
|
+
};
|
|
111
120
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
exports.UploadMediaCompleteEvent = UploadMediaCompleteEvent;
|
|
116
|
-
//# sourceMappingURL=index.js.map
|
|
117
|
-
//# sourceMappingURL=index.js.map
|
|
121
|
+
export { FinalizeUploadEvent, FinalizeUploadFailureEvent, ResumeUploadEvent, UploadMediaCompleteEvent };
|
|
122
|
+
//# sourceMappingURL=chunk-BNMI7DW3.js.map
|
|
123
|
+
//# sourceMappingURL=chunk-BNMI7DW3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/events/complete/index.ts"],"names":[],"mappings":"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","file":"chunk-BNMI7DW3.js","sourcesContent":["/*\n * This file is part of the project by AGBOKOUDJO Franck.\n *\n * (c) AGBOKOUDJO Franck <internationaleswebservices@gmail.com>\n * Phone: +229 0167 25 18 86\n * LinkedIn: https://www.linkedin.com/in/internationales-web-apps-services-120520193/\n * Company: INTERNATIONALES WEB APPS & SERVICES\n *\n * For more information, please feel free to contact the author.\n */\nimport { BaseEvent } from \"@wlindabla/event_dispatcher\";\nimport { ResumeData, UploadResult } from \"../../types\";\n\nimport type {\n ResponseEventInterface\n} from \"@wlindabla/http_client/events\";\n\nimport type {\n FetchResponseInterface\n} from \"@wlindabla/http_client\";\n\n/**\n * Event data for MEDIA_CHUNK_UPLOAD_RESUME\n */\nexport class ResumeUploadEvent {\n constructor(\n private readonly __resumeData: ResumeData,\n public readonly message: string) { }\n\n public get mediaId(): string | number { return this.__resumeData.fileId; }\n\n public get fileName(): string { return this.__resumeData.fileName; }\n\n public get uploadedChunks(): number { return this.__resumeData.uploadedChunks; }\n\n public get lastChunkIndex(): number { return this.__resumeData.lastChunkIndex; }\n\n public get lastBytePosition(): number { return this.__resumeData.lastBytePosition; }\n\n public get chunkSize(): number { return this.__resumeData.chunkSize; }\n\n public get fileSize(): number { return this.__resumeData.fileSize; }\n}\n\n/**\n * Event data for DOWNLOAD_MEDIA_COMPLETE\n */\nexport class UploadMediaCompleteEvent {\n constructor(private readonly _uploadResult: UploadResult) { }\n\n public get success(): boolean { return this._uploadResult.success; }\n\n public get mediaId(): string | number { return this._uploadResult.fileId! }\n\n public get totalBytes(): number { return this._uploadResult.totalBytes; }\n\n public get totalChunks(): number { return this._uploadResult.totalChunks; }\n\n public get finalizeUploadHttpResponse(): any { return this._uploadResult.finalizeUploadResponse; }\n\n public get operationDuration(): number { return this._uploadResult.duration; }\n\n public get averageSpeed(): number { return this._uploadResult.averageSpeed; }\n}\n\nexport class FinalizeUploadFailureEvent extends BaseEvent{\n constructor(\n public readonly error: Error,\n public readonly status?: number,\n public readonly errorData?: any,\n public readonly responseData?: any,\n public readonly isNetworkError?: boolean\n ) { super(); }\n}\n\nexport class FinalizeUploadEvent extends BaseEvent implements ResponseEventInterface{\n private fetchResponse: FetchResponseInterface|null;\n\n constructor(\n public readonly endPoint:string|URL,\n public readonly mediaId: string,\n public readonly mediaHash: string,\n public readonly headers?: HeadersInit\n ) {\n super();\n this.fetchResponse = null;\n }\n\n /**\n * Returns the response\n */\n public getResponse(): FetchResponseInterface | null {\n return this.fetchResponse;\n }\n\n /**\n * Sets the response\n */\n public setResponse(response: FetchResponseInterface): void {\n this.fetchResponse = response;\n }\n\n /**\n * Returns whether a response was set\n */\n public hasResponse(): boolean {\n return this.fetchResponse !== null;\n }\n}"]}
|