{"version":3,"sources":["webpack://jsFileDownloader/webpack/universalModuleDefinition","webpack://jsFileDownloader/webpack/bootstrap","webpack://jsFileDownloader/./src/exception.js","webpack://jsFileDownloader/./src/index.js"],"names":["downloadException","message","name","module","exports","require","defaultParams","timeout","mobileDisabled","headers","forceDesktopMode","autoStart","includeCredentials","jsFileDownloader","customParams","params","Object","assign","link","createLink","request","downloadFile","Promise","resolve","reject","initDonwload","isMobile","target","href","url","clickLink","createRequest","onload","parseInt","status","startDownload","error","Error","ontimeout","onerror","e","send","test","navigator","userAgent","XMLHttpRequest","open","setRequestHeader","forEach","header","value","responseType","process","addEventListener","withCredentials","filename","content","getResponseHeader","contentParts","replace","match","length","split","pop","document","createElement","style","display","event","MouseEvent","createEvent","initMouseEvent","window","dispatchEvent","response","fileName","file","options","type","File","Blob","lastModifiedDate","Date","getFileName","getFile","msSaveOrOpenBlob","objectUrl","URL","createObjectURL","download","setTimeout","webkitURL","revokeObjectURL"],"mappings":"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","file":"js-file-downloader.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"jsFileDownloader\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"jsFileDownloader\"] = factory();\n\telse\n\t\troot[\"jsFileDownloader\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./src/index.js\");\n","\r\nfunction downloadException (message) {\r\n this.message = message;\r\n this.name = 'downloadException';\r\n}\r\n\r\nmodule.exports.downloadException = downloadException;\r\n","/*!\r\n * JS File Downloader v ##package_version##\r\n * https://github.com/AleeeKoi/js-file-downloader\r\n *\r\n * Copyright Alessandro Pellizzari\r\n * Released under the MIT license\r\n * http://opensource.org/licenses/MIT\r\n */\r\n\r\n'use strict';\r\n\r\nconst downloadException = require('./exception').downloadException;\r\n\r\nconst defaultParams = {\r\n timeout: 40000,\r\n mobileDisabled: true,\r\n headers: [],\r\n forceDesktopMode: false,\r\n autoStart: true,\r\n includeCredentials: false\r\n};\r\n\r\nclass jsFileDownloader {\r\n\r\n /**\r\n * You need to define a {String} \"url\" params and optionally others\r\n * * {String} filename\r\n * * {Int} timeout in ms\r\n * * {Boolean} mobileDisabled\r\n * * {Function} process call on request event\r\n * @param {Object} customParams\r\n */\r\n constructor (customParams = {}) {\r\n this.params = Object.assign({}, defaultParams, customParams);\r\n this.link = this.createLink();\r\n this.request = null;\r\n\r\n if (this.params.autoStart) return this.downloadFile();\r\n }\r\n\r\n start () {\r\n return this.downloadFile();\r\n }\r\n\r\n downloadFile () {\r\n return new Promise((resolve, reject) => {\r\n this.initDonwload(resolve, reject);\r\n });\r\n }\r\n\r\n initDonwload (resolve, reject) {\r\n // fallback for old browsers\r\n if (!('download' in this.link) || this.isMobile()) {\r\n this.link.target = '_blank';\r\n this.link.href = this.params.url;\r\n this.clickLink();\r\n return resolve();\r\n }\r\n\r\n this.request = this.createRequest();\r\n\r\n if (!this.params.url) {\r\n return reject('Downloader error: url param not defined!');\r\n }\r\n\r\n this.request.onload = () => {\r\n try {\r\n if (parseInt(this.request.status, 10) !== 200) {\r\n throw downloadException(`status code [${this.request.status}]`);\r\n }\r\n this.startDownload();\r\n resolve(this);\r\n } catch (error) {\r\n reject(new Error(`Downloader error: ${error}`));\r\n }\r\n };\r\n\r\n this.request.ontimeout = () => {\r\n reject(new Error('Downloader error: request timeout'));\r\n };\r\n\r\n this.request.onerror = (e) => {\r\n reject(e);\r\n };\r\n\r\n this.request.send();\r\n\r\n return this;\r\n }\r\n\r\n isMobile () {\r\n return !this.params.forceDesktopMode &&\r\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\r\n }\r\n\r\n createRequest () {\r\n let request = new XMLHttpRequest();\r\n\r\n request.open('GET', this.params.url, true);\r\n request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\r\n this.params.headers.forEach(header => {\r\n request.setRequestHeader(header.name, header.value);\r\n });\r\n request.responseType = 'arraybuffer';\r\n if (this.params.process && typeof this.params.process === 'function') {\r\n request.addEventListener('progress', this.params.process);\r\n }\r\n request.timeout = this.params.timeout;\r\n request.withCredentials = this.params.includeCredentials;\r\n return request;\r\n }\r\n\r\n getFileName () {\r\n // Forcing file name\r\n if (typeof this.params.filename === 'string') {\r\n return this.params.filename;\r\n }\r\n // Trying to get file name from response header\r\n let content = this.request.getResponseHeader('Content-Disposition');\r\n let contentParts = [];\r\n\r\n if (content) {\r\n contentParts = content.replace(/[\"']/g, '').match(/filename\\*?=([^;]+)/);\r\n }\r\n\r\n return contentParts && contentParts.length >= 1 ?\r\n contentParts[1] :\r\n this.params.url.split('/').pop().split('?')[0];\r\n }\r\n\r\n createLink () {\r\n let link = document.createElement('a');\r\n\r\n link.style.display = 'none';\r\n return link;\r\n }\r\n\r\n clickLink () {\r\n let event;\r\n\r\n try {\r\n event = new MouseEvent('click');\r\n } catch (e) {\r\n event = document.createEvent('MouseEvent');\r\n event.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n }\r\n\r\n this.link.dispatchEvent(event);\r\n }\r\n\r\n getFile (response, fileName) {\r\n let file = null;\r\n let options = { type: 'application/octet-stream' };\r\n\r\n try {\r\n file = new File([response], fileName, options);\r\n } catch (e) {\r\n file = new Blob([response], options);\r\n file.name = fileName;\r\n file.lastModifiedDate = new Date();\r\n }\r\n return file;\r\n }\r\n\r\n startDownload () {\r\n let fileName = this.getFileName(this.request);\r\n let file = this.getFile(this.request.response, fileName);\r\n\r\n // native IE\r\n if ('msSaveOrOpenBlob' in window.navigator) {\r\n return window.navigator.msSaveOrOpenBlob(file, fileName);\r\n }\r\n\r\n let objectUrl = window.URL.createObjectURL(file);\r\n\r\n this.link.href = objectUrl;\r\n this.link.download = fileName;\r\n this.clickLink();\r\n\r\n setTimeout(() => {\r\n (window.URL || window.webkitURL || window).revokeObjectURL(objectUrl);\r\n }, 1000 * 40);\r\n\r\n return this;\r\n }\r\n\r\n}\r\n\r\nmodule.exports = jsFileDownloader;\r\n"],"sourceRoot":""}