{"version":3,"names":["$","isBlobSliceSupported","window","Blob","prototype","slice","webkitSlice","mozSlice","blobSlice","file","start","length","apply","copyFormDataAndAppend","formData","appendData","newFormData","FormData","Array","from","keys","Object","forEach","key","append","get","fileUpload","fileName","fileData","url","options","chunkOptions","reportProgress","loaded","total","chunk","uploadProgress","Promise","resolve","reject","queryUrl","query","queryParams","map","join","requestData","fileKey","size","request","post","dataType","async","contentType","processData","data","headers","xhr","xmlHttpRequest","ajaxSettings","upload","addEventListener","event","success","result","error","abortUpload","abort","extend","chunkedFileUpload","maxUploadChunkSizeBytes","uploadId","fileUploadAbort","startUpload","chunkSize","Math","min","File","name","type","lastModified","uploadFormData","__chunkedFileUploadId","uploadAbort","progress","then","response","Error","catch","jQuery"],"sources":["../../Assets/Scripts/chunked-file-upload.js"],"sourcesContent":["(($) => {\r\n const isBlobSliceSupported = window.Blob &&\r\n (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice);\r\n\r\n function blobSlice(file, start, length) {\r\n const slice = file.slice || file.webkitSlice || file.mozSlice;\r\n\r\n return slice.apply(file, [start, start + length]);\r\n }\r\n\r\n function copyFormDataAndAppend(formData, appendData) {\r\n const newFormData = new FormData();\r\n\r\n Array.from(\r\n formData instanceof FormData\r\n ? formData.keys()\r\n : Object.keys(formData))\r\n .forEach((key) => newFormData.append(\r\n key,\r\n formData instanceof FormData\r\n ? formData.get(key)\r\n : formData[key]));\r\n\r\n if (appendData) {\r\n Object.keys(appendData).forEach((key) => newFormData.append(key, appendData[key]));\r\n }\r\n\r\n return newFormData;\r\n }\r\n\r\n function fileUpload(fileName, fileData, url, formData, options, chunkOptions) {\r\n const reportProgress = (loaded, total) => {\r\n if (!chunkOptions?.chunk && options.uploadProgress) {\r\n options.uploadProgress({\r\n loaded,\r\n total,\r\n });\r\n }\r\n\r\n if (chunkOptions?.uploadProgress) {\r\n chunkOptions.uploadProgress({\r\n loaded,\r\n total,\r\n });\r\n }\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n let queryUrl = url;\r\n if (options.query) {\r\n const queryParams = Object.keys(options.query)\r\n .map((key) => `${key}=${options.query[key]}`)\r\n .join('&');\r\n queryUrl = `${url}?${queryParams}`;\r\n }\r\n\r\n const requestData = copyFormDataAndAppend(\r\n formData,\r\n {\r\n [options.fileKey || fileName]: fileData,\r\n });\r\n\r\n reportProgress(0, fileData.size);\r\n\r\n const request = $.post({\r\n url: queryUrl,\r\n dataType: 'json',\r\n async: true,\r\n contentType: false,\r\n processData: false,\r\n data: requestData,\r\n headers: options.headers,\r\n xhr: () => {\r\n const xmlHttpRequest = $.ajaxSettings.xhr();\r\n xmlHttpRequest.upload.addEventListener('progress', (event) => {\r\n reportProgress(event.loaded, event.total);\r\n });\r\n\r\n return xmlHttpRequest;\r\n },\r\n success: (result) => {\r\n reportProgress(fileData.size, fileData.size);\r\n resolve(result);\r\n },\r\n error: reject,\r\n });\r\n\r\n if (!chunkOptions?.chunk && options.abortUpload) {\r\n options.abortUpload(() => request.abort());\r\n }\r\n\r\n if (chunkOptions?.abortUpload) {\r\n chunkOptions.abortUpload(() => request.abort());\r\n }\r\n });\r\n }\r\n\r\n function chunkedFileUpload(file, url, formData, maxUploadChunkSizeBytes, uploadId, options) {\r\n const reportProgress = (loaded, total) => {\r\n if (options.uploadProgress) {\r\n options.uploadProgress({\r\n loaded,\r\n total,\r\n });\r\n }\r\n };\r\n\r\n return new Promise((resolve, reject) => {\r\n options.headers = options.headers || {};\r\n\r\n reportProgress(0, file.size);\r\n\r\n let fileUploadAbort;\r\n let abort = false;\r\n if (options.abortUpload) {\r\n options.abortUpload(() => {\r\n abort = true;\r\n if (fileUploadAbort) {\r\n fileUploadAbort();\r\n }\r\n });\r\n }\r\n\r\n (function startUpload(start) {\r\n const chunkSize = Math.min(file.size - start, maxUploadChunkSizeBytes);\r\n const fileData = new File(\r\n [blobSlice(file, start, chunkSize)],\r\n file.name,\r\n {\r\n type: file.type,\r\n lastModified: file.lastModified,\r\n });\r\n const uploadFormData = copyFormDataAndAppend(\r\n formData,\r\n {\r\n __chunkedFileUploadId: uploadId,\r\n });\r\n\r\n options.headers['Content-Range'] = `bytes ${start}-${start + chunkSize - 1}/${file.size}`;\r\n fileUpload(\r\n file.name,\r\n fileData,\r\n url,\r\n uploadFormData,\r\n options,\r\n {\r\n chunk: true,\r\n abortUpload: (uploadAbort) => {\r\n fileUploadAbort = uploadAbort;\r\n },\r\n uploadProgress: (progress) => {\r\n reportProgress(start + progress.loaded, file.size);\r\n },\r\n })\r\n .then((response) => {\r\n if (abort) {\r\n reject(new Error('Upload aborted.'));\r\n }\r\n\r\n reportProgress(start + chunkSize, file.size);\r\n\r\n if (start + chunkSize < file.size) {\r\n return startUpload(start + chunkSize);\r\n }\r\n\r\n return resolve(response);\r\n })\r\n .catch(reject);\r\n })(0);\r\n });\r\n }\r\n\r\n $.extend({\r\n chunkedFileUpload(file, url, formData, maxUploadChunkSizeBytes, uploadId, options) {\r\n return new Promise((resolve, reject) => {\r\n const result = maxUploadChunkSizeBytes && isBlobSliceSupported\r\n ? chunkedFileUpload(file, url, formData, maxUploadChunkSizeBytes, uploadId, options || { })\r\n // Fallback to normal upload.\r\n : fileUpload(file.name, file, url, formData, options || { });\r\n result\r\n .then(resolve)\r\n .catch(reject);\r\n });\r\n },\r\n });\r\n})(jQuery);\r\n"],"mappings":"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","ignoreList":[]}