{"version":3,"file":"22559db0aed149faea70fe7d.js?3.6.14.7428b935c.1723600572441","mappings":"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","sources":["webpack://mono-repo/./node_modules/array-move/index.js","webpack://mono-repo/./node_modules/attr-accept/dist/es/index.js","webpack://mono-repo/./node_modules/mime-match/index.js","webpack://mono-repo/./node_modules/namespace-emitter/index.js","webpack://mono-repo/./node_modules/p-retry/index.js","webpack://mono-repo/./node_modules/querystringify/index.js","webpack://mono-repo/./node_modules/react-dropzone/dist/es/utils/index.js","webpack://mono-repo/./node_modules/react-dropzone/dist/es/index.js","webpack://mono-repo/./node_modules/requires-port/index.js","webpack://mono-repo/./node_modules/retry/index.js","webpack://mono-repo/./node_modules/tus-js-client/lib.esm/browser/index.js","webpack://mono-repo/./node_modules/url-parse/index.js","webpack://mono-repo/./node_modules/wildcard/index.js","webpack://mono-repo/./node_modules/@uppy/aws-s3-multipart/lib/index.js","webpack://mono-repo/./node_modules/@uppy/golden-retriever/lib/index.js","webpack://mono-repo/./node_modules/@uppy/store-default/lib/index.js","webpack://mono-repo/./node_modules/@uppy/thumbnail-generator/lib/index.js","webpack://mono-repo/./node_modules/@uppy/xhr-upload/lib/index.js","webpack://mono-repo/./node_modules/nanoid/non-secure/index.js","webpack://mono-repo/./node_modules/optics-ts/dist/mjs/index.js"],"sourcesContent":["'use strict';\n\nconst arrayMoveMutate = (array, from, to) => {\n\tconst startIndex = from < 0 ? array.length + from : from;\n\n\tif (startIndex >= 0 && startIndex < array.length) {\n\t\tconst endIndex = to < 0 ? array.length + to : to;\n\n\t\tconst [item] = array.splice(from, 1);\n\t\tarray.splice(endIndex, 0, item);\n\t}\n};\n\nconst arrayMove = (array, from, to) => {\n\tarray = [...array];\n\tarrayMoveMutate(array, from, to);\n\treturn array;\n};\n\nmodule.exports = arrayMove;\nmodule.exports.mutate = arrayMoveMutate;\n","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (file, acceptedFiles) {\n if (file && acceptedFiles) {\n var acceptedFilesArray = Array.isArray(acceptedFiles) ? acceptedFiles : acceptedFiles.split(',');\n var fileName = file.name || '';\n var mimeType = (file.type || '').toLowerCase();\n var baseMimeType = mimeType.replace(/\\/.*$/, '');\n return acceptedFilesArray.some(function (type) {\n var validType = type.trim().toLowerCase();\n\n if (validType.charAt(0) === '.') {\n return fileName.toLowerCase().endsWith(validType);\n } else if (validType.endsWith('/*')) {\n // This is something like a image/* mime type\n return baseMimeType === validType.replace(/\\/.*$/, '');\n }\n\n return mimeType === validType;\n });\n }\n\n return true;\n};","var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n # mime-match\n\n A simple function to checker whether a target mime type matches a mime-type\n pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n ## Example Usage\n\n <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n function test(pattern) {\n var result = wildcard(pattern, target, reMimePartSplit);\n\n // ensure that we have a valid mime type (should have two parts)\n return result && result.length >= 2;\n }\n\n return pattern ? test(pattern.split(';')[0]) : test;\n};\n","/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n* console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n* console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n var emitter = {}\n var _fns = emitter._fns = {}\n\n /**\n * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n * @name emit\n * @param {String} event – the name of the event, with optional namespace\n * @param {...*} data – up to 6 arguments that are passed to the event listener\n * @example\n * emitter.emit('example')\n * emitter.emit('demo:test')\n * emitter.emit('data', { example: true}, 'a string', 1)\n */\n emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n var toEmit = getListeners(event)\n\n if (toEmit.length) {\n emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n }\n }\n\n /**\n * Create en event listener.\n * @name on\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.on('example', function () {})\n * emitter.on('demo', function () {})\n */\n emitter.on = function on (event, fn) {\n if (!_fns[event]) {\n _fns[event] = []\n }\n\n _fns[event].push(fn)\n }\n\n /**\n * Create en event listener that fires once.\n * @name once\n * @param {String} event\n * @param {Function} fn\n * @example\n * emitter.once('example', function () {})\n * emitter.once('demo', function () {})\n */\n emitter.once = function once (event, fn) {\n function one () {\n fn.apply(this, arguments)\n emitter.off(event, one)\n }\n this.on(event, one)\n }\n\n /**\n * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n * @name off\n * @param {String} event\n * @param {Function} [fn] – the specific handler\n * @example\n * emitter.off('example')\n * emitter.off('demo', function () {})\n */\n emitter.off = function off (event, fn) {\n var keep = []\n\n if (event && fn) {\n var fns = this._fns[event]\n var i = 0\n var l = fns ? fns.length : 0\n\n for (i; i < l; i++) {\n if (fns[i] !== fn) {\n keep.push(fns[i])\n }\n }\n }\n\n keep.length ? this._fns[event] = keep : delete this._fns[event]\n }\n\n function getListeners (e) {\n var out = _fns[e] ? _fns[e] : []\n var idx = e.indexOf(':')\n var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n var keys = Object.keys(_fns)\n var i = 0\n var l = keys.length\n\n for (i; i < l; i++) {\n var key = keys[i]\n if (key === '*') {\n out = out.concat(_fns[key])\n }\n\n if (args.length === 2 && args[0] === key) {\n out = out.concat(_fns[key])\n break\n }\n }\n\n return out\n }\n\n function emitAll (e, fns, args) {\n var i = 0\n var l = fns.length\n\n for (i; i < l; i++) {\n if (!fns[i]) break\n fns[i].event = e\n fns[i].apply(fns[i], args)\n }\n }\n\n return emitter\n}\n","'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari\n\t'Network request failed' // `cross-fetch`\n];\n\nclass AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nimport accepts from \"attr-accept\"; // Error codes\n\nexport var FILE_INVALID_TYPE = \"file-invalid-type\";\nexport var FILE_TOO_LARGE = \"file-too-large\";\nexport var FILE_TOO_SMALL = \"file-too-small\";\nexport var TOO_MANY_FILES = \"too-many-files\";\nexport var ErrorCode = {\n FileInvalidType: FILE_INVALID_TYPE,\n FileTooLarge: FILE_TOO_LARGE,\n FileTooSmall: FILE_TOO_SMALL,\n TooManyFiles: TOO_MANY_FILES\n}; // File Errors\n\nexport var getInvalidTypeRejectionErr = function getInvalidTypeRejectionErr(accept) {\n accept = Array.isArray(accept) && accept.length === 1 ? accept[0] : accept;\n var messageSuffix = Array.isArray(accept) ? \"one of \".concat(accept.join(\", \")) : accept;\n return {\n code: FILE_INVALID_TYPE,\n message: \"File type must be \".concat(messageSuffix)\n };\n};\nexport var getTooLargeRejectionErr = function getTooLargeRejectionErr(maxSize) {\n return {\n code: FILE_TOO_LARGE,\n message: \"File is larger than \".concat(maxSize, \" \").concat(maxSize === 1 ? \"byte\" : \"bytes\")\n };\n};\nexport var getTooSmallRejectionErr = function getTooSmallRejectionErr(minSize) {\n return {\n code: FILE_TOO_SMALL,\n message: \"File is smaller than \".concat(minSize, \" \").concat(minSize === 1 ? \"byte\" : \"bytes\")\n };\n};\nexport var TOO_MANY_FILES_REJECTION = {\n code: TOO_MANY_FILES,\n message: \"Too many files\"\n}; // Firefox versions prior to 53 return a bogus MIME type for every file drag, so dragovers with\n// that MIME type will always be accepted\n\nexport function fileAccepted(file, accept) {\n var isAcceptable = file.type === \"application/x-moz-file\" || accepts(file, accept);\n return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)];\n}\nexport function fileMatchSize(file, minSize, maxSize) {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) {\n if (file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n if (file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];\n } else if (isDefined(minSize) && file.size < minSize) return [false, getTooSmallRejectionErr(minSize)];else if (isDefined(maxSize) && file.size > maxSize) return [false, getTooLargeRejectionErr(maxSize)];\n }\n\n return [true, null];\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null;\n}\n\nexport function allFilesAccepted(_ref) {\n var files = _ref.files,\n accept = _ref.accept,\n minSize = _ref.minSize,\n maxSize = _ref.maxSize,\n multiple = _ref.multiple,\n maxFiles = _ref.maxFiles;\n\n if (!multiple && files.length > 1 || multiple && maxFiles >= 1 && files.length > maxFiles) {\n return false;\n }\n\n return files.every(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 1),\n accepted = _fileAccepted2[0];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 1),\n sizeMatch = _fileMatchSize2[0];\n\n return accepted && sizeMatch;\n });\n} // React's synthetic events has event.isPropagationStopped,\n// but to remain compatibility with other libs (Preact) fall back\n// to check event.cancelBubble\n\nexport function isPropagationStopped(event) {\n if (typeof event.isPropagationStopped === \"function\") {\n return event.isPropagationStopped();\n } else if (typeof event.cancelBubble !== \"undefined\") {\n return event.cancelBubble;\n }\n\n return false;\n}\nexport function isEvtWithFiles(event) {\n if (!event.dataTransfer) {\n return !!event.target && !!event.target.files;\n } // https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer/types\n // https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API/Recommended_drag_types#file\n\n\n return Array.prototype.some.call(event.dataTransfer.types, function (type) {\n return type === \"Files\" || type === \"application/x-moz-file\";\n });\n}\nexport function isKindFile(item) {\n return _typeof(item) === \"object\" && item !== null && item.kind === \"file\";\n} // allow the entire document to be a drag target\n\nexport function onDocumentDragOver(event) {\n event.preventDefault();\n}\n\nfunction isIe(userAgent) {\n return userAgent.indexOf(\"MSIE\") !== -1 || userAgent.indexOf(\"Trident/\") !== -1;\n}\n\nfunction isEdge(userAgent) {\n return userAgent.indexOf(\"Edge/\") !== -1;\n}\n\nexport function isIeOrEdge() {\n var userAgent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : window.navigator.userAgent;\n return isIe(userAgent) || isEdge(userAgent);\n}\n/**\n * This is intended to be used to compose event handlers\n * They are executed in order until one of them calls `event.isPropagationStopped()`.\n * Note that the check is done on the first invoke too,\n * meaning that if propagation was stopped before invoking the fns,\n * no handlers will be executed.\n *\n * @param {Function} fns the event hanlder functions\n * @return {Function} the event handler to add to an element\n */\n\nexport function composeEventHandlers() {\n for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n fns[_key] = arguments[_key];\n }\n\n return function (event) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return fns.some(function (fn) {\n if (!isPropagationStopped(event) && fn) {\n fn.apply(void 0, [event].concat(args));\n }\n\n return isPropagationStopped(event);\n });\n };\n}\n/**\n * canUseFileSystemAccessAPI checks if the [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API)\n * is supported by the browser.\n * @returns {boolean}\n */\n\nexport function canUseFileSystemAccessAPI() {\n return \"showOpenFilePicker\" in window;\n}\n/**\n * filePickerOptionsTypes returns the {types} option for https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n * based on the accept attr (see https://github.com/react-dropzone/attr-accept)\n * E.g: converts ['image/*', 'text/*'] to {'image/*': [], 'text/*': []}\n * @param {string|string[]} accept\n */\n\nexport function filePickerOptionsTypes(accept) {\n accept = typeof accept === \"string\" ? accept.split(\",\") : accept;\n return [{\n description: \"everything\",\n // TODO: Need to handle filtering more elegantly than this!\n accept: Array.isArray(accept) ? // Accept just MIME types as per spec\n // NOTE: accept can be https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers\n accept.filter(function (item) {\n return item === \"audio/*\" || item === \"video/*\" || item === \"image/*\" || item === \"text/*\" || /\\w+\\/[-+.\\w]+/g.test(item);\n }).reduce(function (a, b) {\n return _objectSpread(_objectSpread({}, a), {}, _defineProperty({}, b, []));\n }, {}) : {}\n }];\n}\n/**\n * Check if v is an exception caused by aborting a request (e.g window.showOpenFilePicker()).\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is an abort exception.\n */\n\nexport function isAbort(v) {\n return v instanceof DOMException && (v.name === \"AbortError\" || v.code === v.ABORT_ERR);\n}\n/**\n * Check if v is a security error.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/DOMException.\n * @param {any} v\n * @returns {boolean} True if v is a security error.\n */\n\nexport function isSecurityError(v) {\n return v instanceof DOMException && (v.name === \"SecurityError\" || v.code === v.SECURITY_ERR);\n}","var _excluded = [\"children\"],\n _excluded2 = [\"open\"],\n _excluded3 = [\"refKey\", \"role\", \"onKeyDown\", \"onFocus\", \"onBlur\", \"onClick\", \"onDragEnter\", \"onDragOver\", \"onDragLeave\", \"onDrop\"],\n _excluded4 = [\"refKey\", \"onChange\", \"onClick\"];\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* eslint prefer-template: 0 */\nimport React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useReducer, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { fromEvent } from \"file-selector\";\nimport { allFilesAccepted, composeEventHandlers, fileAccepted, fileMatchSize, filePickerOptionsTypes, canUseFileSystemAccessAPI, isAbort, isEvtWithFiles, isIeOrEdge, isPropagationStopped, isSecurityError, onDocumentDragOver, TOO_MANY_FILES_REJECTION } from \"./utils/index\";\n/**\n * Convenience wrapper component for the `useDropzone` hook\n *\n * ```jsx\n * \n * {({getRootProps, getInputProps}) => (\n *
\n * \n *

Drag 'n' drop some files here, or click to select files

\n *
\n * )}\n *
\n * ```\n */\n\nvar Dropzone = /*#__PURE__*/forwardRef(function (_ref, ref) {\n var children = _ref.children,\n params = _objectWithoutProperties(_ref, _excluded);\n\n var _useDropzone = useDropzone(params),\n open = _useDropzone.open,\n props = _objectWithoutProperties(_useDropzone, _excluded2);\n\n useImperativeHandle(ref, function () {\n return {\n open: open\n };\n }, [open]); // TODO: Figure out why react-styleguidist cannot create docs if we don't return a jsx element\n\n return /*#__PURE__*/React.createElement(Fragment, null, children(_objectSpread(_objectSpread({}, props), {}, {\n open: open\n })));\n});\nDropzone.displayName = \"Dropzone\"; // Add default props for react-docgen\n\nvar defaultProps = {\n disabled: false,\n getFilesFromEvent: fromEvent,\n maxSize: Infinity,\n minSize: 0,\n multiple: true,\n maxFiles: 0,\n preventDropOnDocument: true,\n noClick: false,\n noKeyboard: false,\n noDrag: false,\n noDragEventsBubbling: false,\n validator: null,\n useFsAccessApi: true\n};\nDropzone.defaultProps = defaultProps;\nDropzone.propTypes = {\n /**\n * Render function that exposes the dropzone state and prop getter fns\n *\n * @param {object} params\n * @param {Function} params.getRootProps Returns the props you should apply to the root drop container you render\n * @param {Function} params.getInputProps Returns the props you should apply to hidden file input you render\n * @param {Function} params.open Open the native file selection dialog\n * @param {boolean} params.isFocused Dropzone area is in focus\n * @param {boolean} params.isFileDialogActive File dialog is opened\n * @param {boolean} params.isDragActive Active drag is in progress\n * @param {boolean} params.isDragAccept Dragged files are accepted\n * @param {boolean} params.isDragReject Some dragged files are rejected\n * @param {File[]} params.draggedFiles Files in active drag\n * @param {File[]} params.acceptedFiles Accepted files\n * @param {FileRejection[]} params.fileRejections Rejected files and why they were rejected\n */\n children: PropTypes.func,\n\n /**\n * Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files\n */\n multiple: PropTypes.bool,\n\n /**\n * If false, allow dropped items to take over the current browser window\n */\n preventDropOnDocument: PropTypes.bool,\n\n /**\n * If true, disables click to open the native file selection dialog\n */\n noClick: PropTypes.bool,\n\n /**\n * If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n */\n noKeyboard: PropTypes.bool,\n\n /**\n * If true, disables drag 'n' drop\n */\n noDrag: PropTypes.bool,\n\n /**\n * If true, stops drag event propagation to parents\n */\n noDragEventsBubbling: PropTypes.bool,\n\n /**\n * Minimum file size (in bytes)\n */\n minSize: PropTypes.number,\n\n /**\n * Maximum file size (in bytes)\n */\n maxSize: PropTypes.number,\n\n /**\n * Maximum accepted number of files\n * The default value is 0 which means there is no limitation to how many files are accepted.\n */\n maxFiles: PropTypes.number,\n\n /**\n * Enable/disable the dropzone\n */\n disabled: PropTypes.bool,\n\n /**\n * Use this to provide a custom file aggregator\n *\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n getFilesFromEvent: PropTypes.func,\n\n /**\n * Cb for when closing the file dialog with no selection\n */\n onFileDialogCancel: PropTypes.func,\n\n /**\n * Cb for when opening the file dialog\n */\n onFileDialogOpen: PropTypes.func,\n\n /**\n * Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n * to open the file picker instead of using an `` click event.\n */\n useFsAccessApi: PropTypes.bool,\n\n /**\n * Cb for when the `dragenter` event occurs.\n *\n * @param {DragEvent} event\n */\n onDragEnter: PropTypes.func,\n\n /**\n * Cb for when the `dragleave` event occurs\n *\n * @param {DragEvent} event\n */\n onDragLeave: PropTypes.func,\n\n /**\n * Cb for when the `dragover` event occurs\n *\n * @param {DragEvent} event\n */\n onDragOver: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n *\n * @param {File[]} acceptedFiles\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n onDrop: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are accepted, this callback is not invoked.\n *\n * @param {File[]} files\n * @param {(DragEvent|Event)} event\n */\n onDropAccepted: PropTypes.func,\n\n /**\n * Cb for when the `drop` event occurs.\n * Note that if no files are rejected, this callback is not invoked.\n *\n * @param {FileRejection[]} fileRejections\n * @param {(DragEvent|Event)} event\n */\n onDropRejected: PropTypes.func,\n\n /**\n * Custom validation function\n * @param {File} file\n * @returns {FileError|FileError[]}\n */\n validator: PropTypes.func\n};\nexport default Dropzone;\n/**\n * A function that is invoked for the `dragenter`,\n * `dragover` and `dragleave` events.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dragCb\n * @param {DragEvent} event\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are not files (such as link, text, etc.).\n *\n * @callback dropCb\n * @param {File[]} acceptedFiles List of accepted files\n * @param {FileRejection[]} fileRejections List of rejected files and why they were rejected\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n * It is not invoked if the items are files (such as link, text, etc.).\n *\n * @callback dropAcceptedCb\n * @param {File[]} files List of accepted files that meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is invoked for the `drop` or input change event.\n *\n * @callback dropRejectedCb\n * @param {File[]} files List of rejected files that do not meet the given criteria\n * (`accept`, `multiple`, `minSize`, `maxSize`)\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n */\n\n/**\n * A function that is used aggregate files,\n * in a asynchronous fashion, from drag or input change events.\n *\n * @callback getFilesFromEvent\n * @param {(DragEvent|Event)} event A drag event or input change event (if files were selected via the file dialog)\n * @returns {(File[]|Promise)}\n */\n\n/**\n * An object with the current dropzone state and some helper functions.\n *\n * @typedef {object} DropzoneState\n * @property {Function} getRootProps Returns the props you should apply to the root drop container you render\n * @property {Function} getInputProps Returns the props you should apply to hidden file input you render\n * @property {Function} open Open the native file selection dialog\n * @property {boolean} isFocused Dropzone area is in focus\n * @property {boolean} isFileDialogActive File dialog is opened\n * @property {boolean} isDragActive Active drag is in progress\n * @property {boolean} isDragAccept Dragged files are accepted\n * @property {boolean} isDragReject Some dragged files are rejected\n * @property {File[]} draggedFiles Files in active drag\n * @property {File[]} acceptedFiles Accepted files\n * @property {FileRejection[]} fileRejections Rejected files and why they were rejected\n */\n\nvar initialState = {\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n draggedFiles: [],\n acceptedFiles: [],\n fileRejections: []\n};\n/**\n * A React hook that creates a drag 'n' drop area.\n *\n * ```jsx\n * function MyDropzone(props) {\n * const {getRootProps, getInputProps} = useDropzone({\n * onDrop: acceptedFiles => {\n * // do something with the File objects, e.g. upload to some server\n * }\n * });\n * return (\n *
\n * \n *

Drag and drop some files here, or click to select files

\n *
\n * )\n * }\n * ```\n *\n * @function useDropzone\n *\n * @param {object} props\n * @param {string|string[]} [props.accept] Set accepted file types.\n * See https://github.com/okonet/attr-accept for more information.\n * Keep in mind that mime type determination is not reliable across platforms. CSV files,\n * for example, are reported as text/plain under macOS but as application/vnd.ms-excel under\n * Windows. In some cases there might not be a mime type set at all.\n * See: https://github.com/react-dropzone/react-dropzone/issues/276\n * @param {boolean} [props.multiple=true] Allow drag 'n' drop (or selection from the file dialog) of multiple files\n * @param {boolean} [props.preventDropOnDocument=true] If false, allow dropped items to take over the current browser window\n * @param {boolean} [props.noClick=false] If true, disables click to open the native file selection dialog\n * @param {boolean} [props.noKeyboard=false] If true, disables SPACE/ENTER to open the native file selection dialog.\n * Note that it also stops tracking the focus state.\n * @param {boolean} [props.noDrag=false] If true, disables drag 'n' drop\n * @param {boolean} [props.noDragEventsBubbling=false] If true, stops drag event propagation to parents\n * @param {number} [props.minSize=0] Minimum file size (in bytes)\n * @param {number} [props.maxSize=Infinity] Maximum file size (in bytes)\n * @param {boolean} [props.disabled=false] Enable/disable the dropzone\n * @param {getFilesFromEvent} [props.getFilesFromEvent] Use this to provide a custom file aggregator\n * @param {Function} [props.onFileDialogCancel] Cb for when closing the file dialog with no selection\n * @param {boolean} [props.useFsAccessApi] Set to true to use the https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API\n * to open the file picker instead of using an `` click event.\n * @param {Function} [props.onFileDialogOpen] Cb for when opening the file dialog\n * @param {dragCb} [props.onDragEnter] Cb for when the `dragenter` event occurs.\n * @param {dragCb} [props.onDragLeave] Cb for when the `dragleave` event occurs\n * @param {dragCb} [props.onDragOver] Cb for when the `dragover` event occurs\n * @param {dropCb} [props.onDrop] Cb for when the `drop` event occurs.\n * Note that this callback is invoked after the `getFilesFromEvent` callback is done.\n *\n * Files are accepted or rejected based on the `accept`, `multiple`, `minSize` and `maxSize` props.\n * `accept` must be a valid [MIME type](http://www.iana.org/assignments/media-types/media-types.xhtml) according to [input element specification](https://www.w3.org/wiki/HTML/Elements/input/file) or a valid file extension.\n * If `multiple` is set to false and additional files are dropped,\n * all files besides the first will be rejected.\n * Any file which does not have a size in the [`minSize`, `maxSize`] range, will be rejected as well.\n *\n * Note that the `onDrop` callback will always be invoked regardless if the dropped files were accepted or rejected.\n * If you'd like to react to a specific scenario, use the `onDropAccepted`/`onDropRejected` props.\n *\n * `onDrop` will provide you with an array of [File](https://developer.mozilla.org/en-US/docs/Web/API/File) objects which you can then process and send to a server.\n * For example, with [SuperAgent](https://github.com/visionmedia/superagent) as a http/ajax library:\n *\n * ```js\n * function onDrop(acceptedFiles) {\n * const req = request.post('/upload')\n * acceptedFiles.forEach(file => {\n * req.attach(file.name, file)\n * })\n * req.end(callback)\n * }\n * ```\n * @param {dropAcceptedCb} [props.onDropAccepted]\n * @param {dropRejectedCb} [props.onDropRejected]\n *\n * @returns {DropzoneState}\n */\n\nexport function useDropzone() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var _defaultProps$options = _objectSpread(_objectSpread({}, defaultProps), options),\n accept = _defaultProps$options.accept,\n disabled = _defaultProps$options.disabled,\n getFilesFromEvent = _defaultProps$options.getFilesFromEvent,\n maxSize = _defaultProps$options.maxSize,\n minSize = _defaultProps$options.minSize,\n multiple = _defaultProps$options.multiple,\n maxFiles = _defaultProps$options.maxFiles,\n onDragEnter = _defaultProps$options.onDragEnter,\n onDragLeave = _defaultProps$options.onDragLeave,\n onDragOver = _defaultProps$options.onDragOver,\n onDrop = _defaultProps$options.onDrop,\n onDropAccepted = _defaultProps$options.onDropAccepted,\n onDropRejected = _defaultProps$options.onDropRejected,\n onFileDialogCancel = _defaultProps$options.onFileDialogCancel,\n onFileDialogOpen = _defaultProps$options.onFileDialogOpen,\n useFsAccessApi = _defaultProps$options.useFsAccessApi,\n preventDropOnDocument = _defaultProps$options.preventDropOnDocument,\n noClick = _defaultProps$options.noClick,\n noKeyboard = _defaultProps$options.noKeyboard,\n noDrag = _defaultProps$options.noDrag,\n noDragEventsBubbling = _defaultProps$options.noDragEventsBubbling,\n validator = _defaultProps$options.validator;\n\n var onFileDialogOpenCb = useMemo(function () {\n return typeof onFileDialogOpen === \"function\" ? onFileDialogOpen : noop;\n }, [onFileDialogOpen]);\n var onFileDialogCancelCb = useMemo(function () {\n return typeof onFileDialogCancel === \"function\" ? onFileDialogCancel : noop;\n }, [onFileDialogCancel]);\n var rootRef = useRef(null);\n var inputRef = useRef(null);\n\n var _useReducer = useReducer(reducer, initialState),\n _useReducer2 = _slicedToArray(_useReducer, 2),\n state = _useReducer2[0],\n dispatch = _useReducer2[1];\n\n var isFocused = state.isFocused,\n isFileDialogActive = state.isFileDialogActive,\n draggedFiles = state.draggedFiles;\n var fsAccessApiWorksRef = useRef(typeof window !== \"undefined\" && window.isSecureContext && useFsAccessApi && canUseFileSystemAccessAPI()); // Update file dialog active state when the window is focused on\n\n var onWindowFocus = function onWindowFocus() {\n // Execute the timeout only if the file dialog is opened in the browser\n if (!fsAccessApiWorksRef.current && isFileDialogActive) {\n setTimeout(function () {\n if (inputRef.current) {\n var files = inputRef.current.files;\n\n if (!files.length) {\n dispatch({\n type: \"closeDialog\"\n });\n onFileDialogCancelCb();\n }\n }\n }, 300);\n }\n };\n\n useEffect(function () {\n window.addEventListener(\"focus\", onWindowFocus, false);\n return function () {\n window.removeEventListener(\"focus\", onWindowFocus, false);\n };\n }, [inputRef, isFileDialogActive, onFileDialogCancelCb, fsAccessApiWorksRef]);\n var dragTargetsRef = useRef([]);\n\n var onDocumentDrop = function onDocumentDrop(event) {\n if (rootRef.current && rootRef.current.contains(event.target)) {\n // If we intercepted an event for our instance, let it propagate down to the instance's onDrop handler\n return;\n }\n\n event.preventDefault();\n dragTargetsRef.current = [];\n };\n\n useEffect(function () {\n if (preventDropOnDocument) {\n document.addEventListener(\"dragover\", onDocumentDragOver, false);\n document.addEventListener(\"drop\", onDocumentDrop, false);\n }\n\n return function () {\n if (preventDropOnDocument) {\n document.removeEventListener(\"dragover\", onDocumentDragOver);\n document.removeEventListener(\"drop\", onDocumentDrop);\n }\n };\n }, [rootRef, preventDropOnDocument]);\n var onDragEnterCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [].concat(_toConsumableArray(dragTargetsRef.current), [event.target]);\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (draggedFiles) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n dispatch({\n draggedFiles: draggedFiles,\n isDragActive: true,\n type: \"setDraggedFiles\"\n });\n\n if (onDragEnter) {\n onDragEnter(event);\n }\n });\n }\n }, [getFilesFromEvent, onDragEnter, noDragEventsBubbling]);\n var onDragOverCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event);\n var hasFiles = isEvtWithFiles(event);\n\n if (hasFiles && event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = \"copy\";\n } catch (_unused) {}\n /* eslint-disable-line no-empty */\n\n }\n\n if (hasFiles && onDragOver) {\n onDragOver(event);\n }\n\n return false;\n }, [onDragOver, noDragEventsBubbling]);\n var onDragLeaveCb = useCallback(function (event) {\n event.preventDefault();\n event.persist();\n stopPropagation(event); // Only deactivate once the dropzone and all children have been left\n\n var targets = dragTargetsRef.current.filter(function (target) {\n return rootRef.current && rootRef.current.contains(target);\n }); // Make sure to remove a target present multiple times only once\n // (Firefox may fire dragenter/dragleave multiple times on the same element)\n\n var targetIdx = targets.indexOf(event.target);\n\n if (targetIdx !== -1) {\n targets.splice(targetIdx, 1);\n }\n\n dragTargetsRef.current = targets;\n\n if (targets.length > 0) {\n return;\n }\n\n dispatch({\n isDragActive: false,\n type: \"setDraggedFiles\",\n draggedFiles: []\n });\n\n if (isEvtWithFiles(event) && onDragLeave) {\n onDragLeave(event);\n }\n }, [rootRef, onDragLeave, noDragEventsBubbling]);\n var setFiles = useCallback(function (files, event) {\n var acceptedFiles = [];\n var fileRejections = [];\n files.forEach(function (file) {\n var _fileAccepted = fileAccepted(file, accept),\n _fileAccepted2 = _slicedToArray(_fileAccepted, 2),\n accepted = _fileAccepted2[0],\n acceptError = _fileAccepted2[1];\n\n var _fileMatchSize = fileMatchSize(file, minSize, maxSize),\n _fileMatchSize2 = _slicedToArray(_fileMatchSize, 2),\n sizeMatch = _fileMatchSize2[0],\n sizeError = _fileMatchSize2[1];\n\n var customErrors = validator ? validator(file) : null;\n\n if (accepted && sizeMatch && !customErrors) {\n acceptedFiles.push(file);\n } else {\n var errors = [acceptError, sizeError];\n\n if (customErrors) {\n errors = errors.concat(customErrors);\n }\n\n fileRejections.push({\n file: file,\n errors: errors.filter(function (e) {\n return e;\n })\n });\n }\n });\n\n if (!multiple && acceptedFiles.length > 1 || multiple && maxFiles >= 1 && acceptedFiles.length > maxFiles) {\n // Reject everything and empty accepted files\n acceptedFiles.forEach(function (file) {\n fileRejections.push({\n file: file,\n errors: [TOO_MANY_FILES_REJECTION]\n });\n });\n acceptedFiles.splice(0);\n }\n\n dispatch({\n acceptedFiles: acceptedFiles,\n fileRejections: fileRejections,\n type: \"setFiles\"\n });\n\n if (onDrop) {\n onDrop(acceptedFiles, fileRejections, event);\n }\n\n if (fileRejections.length > 0 && onDropRejected) {\n onDropRejected(fileRejections, event);\n }\n\n if (acceptedFiles.length > 0 && onDropAccepted) {\n onDropAccepted(acceptedFiles, event);\n }\n }, [dispatch, multiple, accept, minSize, maxSize, maxFiles, onDrop, onDropAccepted, onDropRejected, validator]);\n var onDropCb = useCallback(function (event) {\n event.preventDefault(); // Persist here because we need the event later after getFilesFromEvent() is done\n\n event.persist();\n stopPropagation(event);\n dragTargetsRef.current = [];\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event)).then(function (files) {\n if (isPropagationStopped(event) && !noDragEventsBubbling) {\n return;\n }\n\n setFiles(files, event);\n });\n }\n\n dispatch({\n type: \"reset\"\n });\n }, [getFilesFromEvent, setFiles, noDragEventsBubbling]); // Fn for opening the file dialog programmatically\n\n var openFileDialog = useCallback(function () {\n // No point to use FS access APIs if context is not secure\n // https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts#feature_detection\n if (fsAccessApiWorksRef.current) {\n dispatch({\n type: \"openDialog\"\n });\n onFileDialogOpenCb(); // https://developer.mozilla.org/en-US/docs/Web/API/window/showOpenFilePicker\n\n var opts = {\n multiple: multiple,\n types: filePickerOptionsTypes(accept)\n };\n window.showOpenFilePicker(opts).then(function (handles) {\n return getFilesFromEvent(handles);\n }).then(function (files) {\n setFiles(files, null);\n dispatch({\n type: \"closeDialog\"\n });\n }).catch(function (e) {\n // AbortError means the user canceled\n if (isAbort(e)) {\n onFileDialogCancelCb(e);\n dispatch({\n type: \"closeDialog\"\n });\n } else if (isSecurityError(e)) {\n fsAccessApiWorksRef.current = false; // CORS, so cannot use this API\n // Try using the input\n\n if (inputRef.current) {\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }\n });\n return;\n }\n\n if (inputRef.current) {\n dispatch({\n type: \"openDialog\"\n });\n onFileDialogOpenCb();\n inputRef.current.value = null;\n inputRef.current.click();\n }\n }, [dispatch, onFileDialogOpenCb, onFileDialogCancelCb, useFsAccessApi, setFiles, accept, multiple]); // Cb to open the file dialog when SPACE/ENTER occurs on the dropzone\n\n var onKeyDownCb = useCallback(function (event) {\n // Ignore keyboard events bubbling up the DOM tree\n if (!rootRef.current || !rootRef.current.isEqualNode(event.target)) {\n return;\n }\n\n if (event.key === \" \" || event.key === \"Enter\" || event.keyCode === 32 || event.keyCode === 13) {\n event.preventDefault();\n openFileDialog();\n }\n }, [rootRef, openFileDialog]); // Update focus state for the dropzone\n\n var onFocusCb = useCallback(function () {\n dispatch({\n type: \"focus\"\n });\n }, []);\n var onBlurCb = useCallback(function () {\n dispatch({\n type: \"blur\"\n });\n }, []); // Cb to open the file dialog when click occurs on the dropzone\n\n var onClickCb = useCallback(function () {\n if (noClick) {\n return;\n } // In IE11/Edge the file-browser dialog is blocking, therefore, use setTimeout()\n // to ensure React can handle state changes\n // See: https://github.com/react-dropzone/react-dropzone/issues/450\n\n\n if (isIeOrEdge()) {\n setTimeout(openFileDialog, 0);\n } else {\n openFileDialog();\n }\n }, [noClick, openFileDialog]);\n\n var composeHandler = function composeHandler(fn) {\n return disabled ? null : fn;\n };\n\n var composeKeyboardHandler = function composeKeyboardHandler(fn) {\n return noKeyboard ? null : composeHandler(fn);\n };\n\n var composeDragHandler = function composeDragHandler(fn) {\n return noDrag ? null : composeHandler(fn);\n };\n\n var stopPropagation = function stopPropagation(event) {\n if (noDragEventsBubbling) {\n event.stopPropagation();\n }\n };\n\n var getRootProps = useMemo(function () {\n return function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$refKey = _ref2.refKey,\n refKey = _ref2$refKey === void 0 ? \"ref\" : _ref2$refKey,\n role = _ref2.role,\n onKeyDown = _ref2.onKeyDown,\n onFocus = _ref2.onFocus,\n onBlur = _ref2.onBlur,\n onClick = _ref2.onClick,\n onDragEnter = _ref2.onDragEnter,\n onDragOver = _ref2.onDragOver,\n onDragLeave = _ref2.onDragLeave,\n onDrop = _ref2.onDrop,\n rest = _objectWithoutProperties(_ref2, _excluded3);\n\n return _objectSpread(_objectSpread(_defineProperty({\n onKeyDown: composeKeyboardHandler(composeEventHandlers(onKeyDown, onKeyDownCb)),\n onFocus: composeKeyboardHandler(composeEventHandlers(onFocus, onFocusCb)),\n onBlur: composeKeyboardHandler(composeEventHandlers(onBlur, onBlurCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onClickCb)),\n onDragEnter: composeDragHandler(composeEventHandlers(onDragEnter, onDragEnterCb)),\n onDragOver: composeDragHandler(composeEventHandlers(onDragOver, onDragOverCb)),\n onDragLeave: composeDragHandler(composeEventHandlers(onDragLeave, onDragLeaveCb)),\n onDrop: composeDragHandler(composeEventHandlers(onDrop, onDropCb)),\n role: typeof role === \"string\" && role !== \"\" ? role : \"button\"\n }, refKey, rootRef), !disabled && !noKeyboard ? {\n tabIndex: 0\n } : {}), rest);\n };\n }, [rootRef, onKeyDownCb, onFocusCb, onBlurCb, onClickCb, onDragEnterCb, onDragOverCb, onDragLeaveCb, onDropCb, noKeyboard, noDrag, disabled]);\n var onInputElementClick = useCallback(function (event) {\n event.stopPropagation();\n }, []);\n var getInputProps = useMemo(function () {\n return function () {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref3$refKey = _ref3.refKey,\n refKey = _ref3$refKey === void 0 ? \"ref\" : _ref3$refKey,\n onChange = _ref3.onChange,\n onClick = _ref3.onClick,\n rest = _objectWithoutProperties(_ref3, _excluded4);\n\n var inputProps = _defineProperty({\n accept: accept,\n multiple: multiple,\n type: \"file\",\n style: {\n display: \"none\"\n },\n onChange: composeHandler(composeEventHandlers(onChange, onDropCb)),\n onClick: composeHandler(composeEventHandlers(onClick, onInputElementClick)),\n tabIndex: -1\n }, refKey, inputRef);\n\n return _objectSpread(_objectSpread({}, inputProps), rest);\n };\n }, [inputRef, accept, multiple, onDropCb, disabled]);\n var fileCount = draggedFiles.length;\n var isDragAccept = fileCount > 0 && allFilesAccepted({\n files: draggedFiles,\n accept: accept,\n minSize: minSize,\n maxSize: maxSize,\n multiple: multiple,\n maxFiles: maxFiles\n });\n var isDragReject = fileCount > 0 && !isDragAccept;\n return _objectSpread(_objectSpread({}, state), {}, {\n isDragAccept: isDragAccept,\n isDragReject: isDragReject,\n isFocused: isFocused && !disabled,\n getRootProps: getRootProps,\n getInputProps: getInputProps,\n rootRef: rootRef,\n inputRef: inputRef,\n open: composeHandler(openFileDialog)\n });\n}\n\nfunction reducer(state, action) {\n /* istanbul ignore next */\n switch (action.type) {\n case \"focus\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFocused: true\n });\n\n case \"blur\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFocused: false\n });\n\n case \"openDialog\":\n return _objectSpread(_objectSpread({}, initialState), {}, {\n isFileDialogActive: true\n });\n\n case \"closeDialog\":\n return _objectSpread(_objectSpread({}, state), {}, {\n isFileDialogActive: false\n });\n\n case \"setDraggedFiles\":\n /* eslint no-case-declarations: 0 */\n var isDragActive = action.isDragActive,\n draggedFiles = action.draggedFiles;\n return _objectSpread(_objectSpread({}, state), {}, {\n draggedFiles: draggedFiles,\n isDragActive: isDragActive\n });\n\n case \"setFiles\":\n return _objectSpread(_objectSpread({}, state), {}, {\n acceptedFiles: action.acceptedFiles,\n fileRejections: action.fileRejections\n });\n\n case \"reset\":\n return _objectSpread({}, initialState);\n\n default:\n return state;\n }\n}\n\nfunction noop() {}\n\nexport { ErrorCode } from \"./utils\";","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","module.exports = require('./lib/retry');","function _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nimport BaseUpload from '../upload.js';\nimport NoopUrlStorage from '../noopUrlStorage.js';\nimport { enableDebugLog } from '../logger.js';\nimport DetailedError from '../error.js';\nimport { canStoreURLs, WebStorageUrlStorage } from './urlStorage.js';\nimport DefaultHttpStack from './httpStack.js';\nimport FileReader from './fileReader.js';\nimport fingerprint from './fileSignature.js';\nvar defaultOptions = _objectSpread(_objectSpread({}, BaseUpload.defaultOptions), {}, {\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: canStoreURLs ? new WebStorageUrlStorage() : new NoopUrlStorage(),\n fingerprint: fingerprint\n});\nvar Upload = /*#__PURE__*/function (_BaseUpload) {\n _inherits(Upload, _BaseUpload);\n var _super = _createSuper(Upload);\n function Upload() {\n var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Upload);\n options = _objectSpread(_objectSpread({}, defaultOptions), options);\n return _super.call(this, file, options);\n }\n _createClass(Upload, null, [{\n key: \"terminate\",\n value: function terminate(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = _objectSpread(_objectSpread({}, defaultOptions), options);\n return BaseUpload.terminate(url, options);\n }\n }]);\n return Upload;\n}(BaseUpload);\nvar _window = window,\n XMLHttpRequest = _window.XMLHttpRequest,\n Blob = _window.Blob;\nvar isSupported = XMLHttpRequest && Blob && typeof Blob.prototype.slice === 'function';\nexport { Upload, canStoreURLs, defaultOptions, isSupported, enableDebugLog, DefaultHttpStack, DetailedError };","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","/* jshint node: true */\n'use strict';\n\nvar REGEXP_PARTS = /(\\*|\\?)/g;\n\n/**\n # wildcard\n\n Very simple wildcard matching, which is designed to provide the same\n functionality that is found in the\n [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n ## Usage\n\n It works with strings:\n\n <<< examples/strings.js\n\n Arrays:\n\n <<< examples/arrays.js\n\n Objects (matching against keys):\n\n <<< examples/objects.js\n\n ## Alternative Implementations\n\n - \n\n Great for full file-based wildcard matching.\n\n - \n\n A well cared for and loved JS wildcard matcher.\n**/\n\nfunction WildcardMatcher(text, separator) {\n this.text = text = text || '';\n this.hasWild = text.indexOf('*') >= 0;\n this.separator = separator;\n this.parts = text.split(separator).map(this.classifyPart.bind(this));\n}\n\nWildcardMatcher.prototype.match = function(input) {\n var matches = true;\n var parts = this.parts;\n var ii;\n var partsCount = parts.length;\n var testParts;\n\n if (typeof input == 'string' || input instanceof String) {\n if (!this.hasWild && this.text != input) {\n matches = false;\n } else {\n testParts = (input || '').split(this.separator);\n for (ii = 0; matches && ii < partsCount; ii++) {\n if (parts[ii] === '*') {\n continue;\n } else if (ii < testParts.length) {\n matches = parts[ii] instanceof RegExp\n ? parts[ii].test(testParts[ii])\n : parts[ii] === testParts[ii];\n } else {\n matches = false;\n }\n }\n\n // If matches, then return the component parts\n matches = matches && testParts;\n }\n }\n else if (typeof input.splice == 'function') {\n matches = [];\n\n for (ii = input.length; ii--; ) {\n if (this.match(input[ii])) {\n matches[matches.length] = input[ii];\n }\n }\n }\n else if (typeof input == 'object') {\n matches = {};\n\n for (var key in input) {\n if (this.match(key)) {\n matches[key] = input[key];\n }\n }\n }\n\n return matches;\n};\n\nWildcardMatcher.prototype.classifyPart = function(part) {\n // in the event that we have been provided a part that is not just a wildcard\n // then turn this into a regular expression for matching purposes\n if (part === '*') {\n return part;\n } else if (part.indexOf('*') >= 0 || part.indexOf('?') >= 0) {\n return new RegExp(part.replace(REGEXP_PARTS, '\\.$1'));\n }\n\n return part;\n};\n\nmodule.exports = function(text, test, separator) {\n var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n if (typeof test != 'undefined') {\n return matcher.match(test);\n }\n\n return matcher;\n};\n","let _Symbol$for;\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport UploaderPlugin from '@uppy/core/lib/UploaderPlugin.js';\nimport { Socket, Provider, RequestClient } from '@uppy/companion-client';\nimport EventManager from '@uppy/utils/lib/EventManager';\nimport emitSocketProgress from '@uppy/utils/lib/emitSocketProgress';\nimport getSocketHost from '@uppy/utils/lib/getSocketHost';\nimport { RateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue';\nimport { filterNonFailedFiles, filterFilesToEmitUploadStarted } from '@uppy/utils/lib/fileFilters';\nimport { createAbortError } from '@uppy/utils/lib/AbortController';\nimport MultipartUploader, { pausingUploadReason } from './MultipartUploader.js';\nimport createSignedURL from './createSignedURL.js';\nconst packageJson = {\n \"version\": \"3.5.2\"\n};\nfunction assertServerError(res) {\n if (res && res.error) {\n const error = new Error(res.message);\n Object.assign(error, res.error);\n throw error;\n }\n return res;\n}\n\n/**\n * Computes the expiry time for a request signed with temporary credentials. If\n * no expiration was provided, or an invalid value (e.g. in the past) is\n * provided, undefined is returned. This function assumes the client clock is in\n * sync with the remote server, which is a requirement for the signature to be\n * validated for AWS anyway.\n *\n * @param {import('../types/index.js').AwsS3STSResponse['credentials']} credentials\n * @returns {number | undefined}\n */\nfunction getExpiry(credentials) {\n const expirationDate = credentials.Expiration;\n if (expirationDate) {\n const timeUntilExpiry = Math.floor((new Date(expirationDate) - Date.now()) / 1000);\n if (timeUntilExpiry > 9) {\n return timeUntilExpiry;\n }\n }\n return undefined;\n}\nfunction getAllowedMetadata(_ref) {\n let {\n meta,\n allowedMetaFields,\n querify = false\n } = _ref;\n const metaFields = allowedMetaFields != null ? allowedMetaFields : Object.keys(meta);\n if (!meta) return {};\n return Object.fromEntries(metaFields.filter(key => meta[key] != null).map(key => {\n const realKey = querify ? `metadata[${key}]` : key;\n const value = String(meta[key]);\n return [realKey, value];\n }));\n}\nfunction throwIfAborted(signal) {\n if (signal != null && signal.aborted) {\n throw createAbortError('The operation was aborted', {\n cause: signal.reason\n });\n }\n}\nvar _abortMultipartUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"abortMultipartUpload\");\nvar _cache = /*#__PURE__*/_classPrivateFieldLooseKey(\"cache\");\nvar _createMultipartUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"createMultipartUpload\");\nvar _fetchSignature = /*#__PURE__*/_classPrivateFieldLooseKey(\"fetchSignature\");\nvar _getUploadParameters = /*#__PURE__*/_classPrivateFieldLooseKey(\"getUploadParameters\");\nvar _listParts = /*#__PURE__*/_classPrivateFieldLooseKey(\"listParts\");\nvar _previousRetryDelay = /*#__PURE__*/_classPrivateFieldLooseKey(\"previousRetryDelay\");\nvar _requests = /*#__PURE__*/_classPrivateFieldLooseKey(\"requests\");\nvar _retryDelayIterator = /*#__PURE__*/_classPrivateFieldLooseKey(\"retryDelayIterator\");\nvar _sendCompletionRequest = /*#__PURE__*/_classPrivateFieldLooseKey(\"sendCompletionRequest\");\nvar _setS3MultipartState = /*#__PURE__*/_classPrivateFieldLooseKey(\"setS3MultipartState\");\nvar _uploadPartBytes = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadPartBytes\");\nvar _getFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"getFile\");\nvar _shouldRetry = /*#__PURE__*/_classPrivateFieldLooseKey(\"shouldRetry\");\nvar _nonMultipartUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"nonMultipartUpload\");\nclass HTTPCommunicationQueue {\n constructor(_requests2, options, setS3MultipartState, getFile) {\n Object.defineProperty(this, _nonMultipartUpload, {\n value: _nonMultipartUpload2\n });\n Object.defineProperty(this, _shouldRetry, {\n value: _shouldRetry2\n });\n Object.defineProperty(this, _abortMultipartUpload, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _cache, {\n writable: true,\n value: new WeakMap()\n });\n Object.defineProperty(this, _createMultipartUpload, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _fetchSignature, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _getUploadParameters, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _listParts, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _previousRetryDelay, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _requests, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _retryDelayIterator, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _sendCompletionRequest, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _setS3MultipartState, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _uploadPartBytes, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _getFile, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldLooseBase(this, _requests)[_requests] = _requests2;\n _classPrivateFieldLooseBase(this, _setS3MultipartState)[_setS3MultipartState] = setS3MultipartState;\n _classPrivateFieldLooseBase(this, _getFile)[_getFile] = getFile;\n this.setOptions(options);\n }\n setOptions(options) {\n const requests = _classPrivateFieldLooseBase(this, _requests)[_requests];\n if ('abortMultipartUpload' in options) {\n _classPrivateFieldLooseBase(this, _abortMultipartUpload)[_abortMultipartUpload] = requests.wrapPromiseFunction(options.abortMultipartUpload, {\n priority: 1\n });\n }\n if ('createMultipartUpload' in options) {\n _classPrivateFieldLooseBase(this, _createMultipartUpload)[_createMultipartUpload] = requests.wrapPromiseFunction(options.createMultipartUpload, {\n priority: -1\n });\n }\n if ('signPart' in options) {\n _classPrivateFieldLooseBase(this, _fetchSignature)[_fetchSignature] = requests.wrapPromiseFunction(options.signPart);\n }\n if ('listParts' in options) {\n _classPrivateFieldLooseBase(this, _listParts)[_listParts] = requests.wrapPromiseFunction(options.listParts);\n }\n if ('completeMultipartUpload' in options) {\n _classPrivateFieldLooseBase(this, _sendCompletionRequest)[_sendCompletionRequest] = requests.wrapPromiseFunction(options.completeMultipartUpload, {\n priority: 1\n });\n }\n if ('retryDelays' in options) {\n var _options$retryDelays;\n _classPrivateFieldLooseBase(this, _retryDelayIterator)[_retryDelayIterator] = (_options$retryDelays = options.retryDelays) == null ? void 0 : _options$retryDelays.values();\n }\n if ('uploadPartBytes' in options) {\n _classPrivateFieldLooseBase(this, _uploadPartBytes)[_uploadPartBytes] = requests.wrapPromiseFunction(options.uploadPartBytes, {\n priority: Infinity\n });\n }\n if ('getUploadParameters' in options) {\n _classPrivateFieldLooseBase(this, _getUploadParameters)[_getUploadParameters] = requests.wrapPromiseFunction(options.getUploadParameters);\n }\n }\n async getUploadId(file, signal) {\n let cachedResult;\n // As the cache is updated asynchronously, there could be a race condition\n // where we just miss a new result so we loop here until we get nothing back,\n // at which point it's out turn to create a new cache entry.\n while ((cachedResult = _classPrivateFieldLooseBase(this, _cache)[_cache].get(file.data)) != null) {\n try {\n return await cachedResult;\n } catch {\n // In case of failure, we want to ignore the cached error.\n // At this point, either there's a new cached value, or we'll exit the loop a create a new one.\n }\n }\n const promise = _classPrivateFieldLooseBase(this, _createMultipartUpload)[_createMultipartUpload](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), signal);\n const abortPromise = () => {\n promise.abort(signal.reason);\n _classPrivateFieldLooseBase(this, _cache)[_cache].delete(file.data);\n };\n signal.addEventListener('abort', abortPromise, {\n once: true\n });\n _classPrivateFieldLooseBase(this, _cache)[_cache].set(file.data, promise);\n promise.then(async result => {\n signal.removeEventListener('abort', abortPromise);\n _classPrivateFieldLooseBase(this, _setS3MultipartState)[_setS3MultipartState](file, result);\n _classPrivateFieldLooseBase(this, _cache)[_cache].set(file.data, result);\n }, () => {\n signal.removeEventListener('abort', abortPromise);\n _classPrivateFieldLooseBase(this, _cache)[_cache].delete(file.data);\n });\n return promise;\n }\n async abortFileUpload(file) {\n const result = _classPrivateFieldLooseBase(this, _cache)[_cache].get(file.data);\n if (result == null) {\n // If the createMultipartUpload request never was made, we don't\n // need to send the abortMultipartUpload request.\n return;\n }\n // Remove the cache entry right away for follow-up requests do not try to\n // use the soon-to-be aborted chached values.\n _classPrivateFieldLooseBase(this, _cache)[_cache].delete(file.data);\n _classPrivateFieldLooseBase(this, _setS3MultipartState)[_setS3MultipartState](file, Object.create(null));\n let awaitedResult;\n try {\n awaitedResult = await result;\n } catch {\n // If the cached result rejects, there's nothing to abort.\n return;\n }\n await _classPrivateFieldLooseBase(this, _abortMultipartUpload)[_abortMultipartUpload](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), awaitedResult);\n }\n /**\n * @param {import(\"@uppy/core\").UppyFile} file\n * @param {import(\"../types/chunk\").Chunk[]} chunks\n * @param {AbortSignal} signal\n * @returns {Promise}\n */\n async uploadFile(file, chunks, signal) {\n throwIfAborted(signal);\n if (chunks.length === 1 && !chunks[0].shouldUseMultipart) {\n return _classPrivateFieldLooseBase(this, _nonMultipartUpload)[_nonMultipartUpload](file, chunks[0], signal);\n }\n const {\n uploadId,\n key\n } = await this.getUploadId(file, signal);\n throwIfAborted(signal);\n try {\n const parts = await Promise.all(chunks.map((chunk, i) => this.uploadChunk(file, i + 1, chunk, signal)));\n throwIfAborted(signal);\n return await _classPrivateFieldLooseBase(this, _sendCompletionRequest)[_sendCompletionRequest](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), {\n key,\n uploadId,\n parts,\n signal\n }).abortOn(signal);\n } catch (err) {\n if ((err == null ? void 0 : err.cause) !== pausingUploadReason && (err == null ? void 0 : err.name) !== 'AbortError') {\n // We purposefully don't wait for the promise and ignore its status,\n // because we want the error `err` to bubble up ASAP to report it to the\n // user. A failure to abort is not that big of a deal anyway.\n this.abortFileUpload(file);\n }\n throw err;\n }\n }\n restoreUploadFile(file, uploadIdAndKey) {\n _classPrivateFieldLooseBase(this, _cache)[_cache].set(file.data, uploadIdAndKey);\n }\n async resumeUploadFile(file, chunks, signal) {\n throwIfAborted(signal);\n if (chunks.length === 1 && !chunks[0].shouldUseMultipart) {\n return _classPrivateFieldLooseBase(this, _nonMultipartUpload)[_nonMultipartUpload](file, chunks[0], signal);\n }\n const {\n uploadId,\n key\n } = await this.getUploadId(file, signal);\n throwIfAborted(signal);\n const alreadyUploadedParts = await _classPrivateFieldLooseBase(this, _listParts)[_listParts](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), {\n uploadId,\n key,\n signal\n }).abortOn(signal);\n throwIfAborted(signal);\n const parts = await Promise.all(chunks.map((chunk, i) => {\n const partNumber = i + 1;\n const alreadyUploadedInfo = alreadyUploadedParts.find(_ref2 => {\n let {\n PartNumber\n } = _ref2;\n return PartNumber === partNumber;\n });\n if (alreadyUploadedInfo == null) {\n return this.uploadChunk(file, partNumber, chunk, signal);\n }\n // Already uploaded chunks are set to null. If we are restoring the upload, we need to mark it as already uploaded.\n chunk == null || chunk.setAsUploaded == null ? void 0 : chunk.setAsUploaded();\n return {\n PartNumber: partNumber,\n ETag: alreadyUploadedInfo.ETag\n };\n }));\n throwIfAborted(signal);\n return _classPrivateFieldLooseBase(this, _sendCompletionRequest)[_sendCompletionRequest](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), {\n key,\n uploadId,\n parts,\n signal\n }).abortOn(signal);\n }\n\n /**\n *\n * @param {import(\"@uppy/core\").UppyFile} file\n * @param {number} partNumber\n * @param {import(\"../types/chunk\").Chunk} chunk\n * @param {AbortSignal} signal\n * @returns {Promise}\n */\n async uploadChunk(file, partNumber, chunk, signal) {\n throwIfAborted(signal);\n const {\n uploadId,\n key\n } = await this.getUploadId(file, signal);\n throwIfAborted(signal);\n for (;;) {\n const chunkData = chunk.getData();\n const {\n onProgress,\n onComplete\n } = chunk;\n const signature = await _classPrivateFieldLooseBase(this, _fetchSignature)[_fetchSignature](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), {\n uploadId,\n key,\n partNumber,\n body: chunkData,\n signal\n }).abortOn(signal);\n throwIfAborted(signal);\n try {\n return {\n PartNumber: partNumber,\n ...(await _classPrivateFieldLooseBase(this, _uploadPartBytes)[_uploadPartBytes]({\n signature,\n body: chunkData,\n size: chunkData.size,\n onProgress,\n onComplete,\n signal\n }).abortOn(signal))\n };\n } catch (err) {\n if (!(await _classPrivateFieldLooseBase(this, _shouldRetry)[_shouldRetry](err))) throw err;\n }\n }\n }\n}\nasync function _shouldRetry2(err) {\n var _err$source;\n const requests = _classPrivateFieldLooseBase(this, _requests)[_requests];\n const status = err == null || (_err$source = err.source) == null ? void 0 : _err$source.status;\n\n // TODO: this retry logic is taken out of Tus. We should have a centralized place for retrying,\n // perhaps the rate limited queue, and dedupe all plugins with that.\n if (status == null) {\n return false;\n }\n if (status === 403 && err.message === 'Request has expired') {\n if (!requests.isPaused) {\n // We don't want to exhaust the retryDelayIterator as long as there are\n // more than one request in parallel, to give slower connection a chance\n // to catch up with the expiry set in Companion.\n if (requests.limit === 1 || _classPrivateFieldLooseBase(this, _previousRetryDelay)[_previousRetryDelay] == null) {\n var _classPrivateFieldLoo;\n const next = (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _retryDelayIterator)[_retryDelayIterator]) == null ? void 0 : _classPrivateFieldLoo.next();\n if (next == null || next.done) {\n return false;\n }\n // If there are more than 1 request done in parallel, the RLQ limit is\n // decreased and the failed request is requeued after waiting for a bit.\n // If there is only one request in parallel, the limit can't be\n // decreased, so we iterate over `retryDelayIterator` as we do for\n // other failures.\n // `#previousRetryDelay` caches the value so we can re-use it next time.\n _classPrivateFieldLooseBase(this, _previousRetryDelay)[_previousRetryDelay] = next.value;\n }\n // No need to stop the other requests, we just want to lower the limit.\n requests.rateLimit(0);\n await new Promise(resolve => setTimeout(resolve, _classPrivateFieldLooseBase(this, _previousRetryDelay)[_previousRetryDelay]));\n }\n } else if (status === 429) {\n // HTTP 429 Too Many Requests => to avoid the whole download to fail, pause all requests.\n if (!requests.isPaused) {\n var _classPrivateFieldLoo2;\n const next = (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _retryDelayIterator)[_retryDelayIterator]) == null ? void 0 : _classPrivateFieldLoo2.next();\n if (next == null || next.done) {\n return false;\n }\n requests.rateLimit(next.value);\n }\n } else if (status > 400 && status < 500 && status !== 409) {\n // HTTP 4xx, the server won't send anything, it's doesn't make sense to retry\n return false;\n } else if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n // The navigator is offline, let's wait for it to come back online.\n if (!requests.isPaused) {\n requests.pause();\n window.addEventListener('online', () => {\n requests.resume();\n }, {\n once: true\n });\n }\n } else {\n var _classPrivateFieldLoo3;\n // Other error code means the request can be retried later.\n const next = (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _retryDelayIterator)[_retryDelayIterator]) == null ? void 0 : _classPrivateFieldLoo3.next();\n if (next == null || next.done) {\n return false;\n }\n await new Promise(resolve => setTimeout(resolve, next.value));\n }\n return true;\n}\nasync function _nonMultipartUpload2(file, chunk, signal) {\n const {\n method = 'post',\n url,\n fields,\n headers\n } = await _classPrivateFieldLooseBase(this, _getUploadParameters)[_getUploadParameters](_classPrivateFieldLooseBase(this, _getFile)[_getFile](file), {\n signal\n }).abortOn(signal);\n let body;\n const data = chunk.getData();\n if (method === 'post') {\n const formData = new FormData();\n Object.entries(fields).forEach(_ref10 => {\n let [key, value] = _ref10;\n return formData.set(key, value);\n });\n formData.set('file', data);\n body = formData;\n } else {\n body = data;\n }\n const {\n onProgress,\n onComplete\n } = chunk;\n return _classPrivateFieldLooseBase(this, _uploadPartBytes)[_uploadPartBytes]({\n signature: {\n url,\n headers,\n method\n },\n body,\n size: data.size,\n onProgress,\n onComplete,\n signal\n }).abortOn(signal);\n}\nvar _companionCommunicationQueue = /*#__PURE__*/_classPrivateFieldLooseKey(\"companionCommunicationQueue\");\nvar _client = /*#__PURE__*/_classPrivateFieldLooseKey(\"client\");\nvar _cachedTemporaryCredentials = /*#__PURE__*/_classPrivateFieldLooseKey(\"cachedTemporaryCredentials\");\nvar _getTemporarySecurityCredentials = /*#__PURE__*/_classPrivateFieldLooseKey(\"getTemporarySecurityCredentials\");\nvar _setS3MultipartState2 = /*#__PURE__*/_classPrivateFieldLooseKey(\"setS3MultipartState\");\nvar _getFile2 = /*#__PURE__*/_classPrivateFieldLooseKey(\"getFile\");\nvar _uploadFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadFile\");\nvar _requestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestSocketToken\");\nvar _upload = /*#__PURE__*/_classPrivateFieldLooseKey(\"upload\");\nvar _setCompanionHeaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"setCompanionHeaders\");\nvar _setResumableUploadsCapability = /*#__PURE__*/_classPrivateFieldLooseKey(\"setResumableUploadsCapability\");\nvar _resetResumableCapability = /*#__PURE__*/_classPrivateFieldLooseKey(\"resetResumableCapability\");\n_Symbol$for = Symbol.for('uppy test: getClient');\nexport default class AwsS3Multipart extends UploaderPlugin {\n constructor(uppy, _opts) {\n var _this$opts$rateLimite;\n super(uppy, _opts);\n Object.defineProperty(this, _uploadFile, {\n value: _uploadFile2\n });\n Object.defineProperty(this, _getTemporarySecurityCredentials, {\n value: _getTemporarySecurityCredentials2\n });\n Object.defineProperty(this, _companionCommunicationQueue, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _client, {\n writable: true,\n value: void 0\n });\n /**\n * @type {import(\"../types\").AwsS3STSResponse | Promise}\n */\n Object.defineProperty(this, _cachedTemporaryCredentials, {\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, _setS3MultipartState2, {\n writable: true,\n value: (file, _ref3) => {\n let {\n key,\n uploadId\n } = _ref3;\n const cFile = this.uppy.getFile(file.id);\n if (cFile == null) {\n // file was removed from store\n return;\n }\n this.uppy.setFileState(file.id, {\n s3Multipart: {\n ...cFile.s3Multipart,\n key,\n uploadId\n }\n });\n }\n });\n Object.defineProperty(this, _getFile2, {\n writable: true,\n value: file => {\n return this.uppy.getFile(file.id) || file;\n }\n });\n Object.defineProperty(this, _requestSocketToken, {\n writable: true,\n value: async (file, options) => {\n const Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n const client = new Client(this.uppy, file.remote.providerOptions);\n const opts = {\n ...this.opts\n };\n if (file.tus) {\n // Install file-specific upload overrides.\n Object.assign(opts, file.tus);\n }\n if (file.remote.url == null) {\n throw new Error('Cannot connect to an undefined URL');\n }\n const res = await client.post(file.remote.url, {\n ...file.remote.body,\n protocol: 's3-multipart',\n size: file.data.size,\n metadata: file.meta\n }, options);\n return res.token;\n }\n });\n Object.defineProperty(this, _upload, {\n writable: true,\n value: async fileIDs => {\n if (fileIDs.length === 0) return undefined;\n const files = this.uppy.getFilesByIds(fileIDs);\n const filesFiltered = filterNonFailedFiles(files);\n const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n this.uppy.emit('upload-start', filesToEmit);\n const promises = filesFiltered.map(file => {\n if (file.isRemote) {\n _classPrivateFieldLooseBase(this, _setResumableUploadsCapability)[_setResumableUploadsCapability](false);\n const controller = new AbortController();\n const removedHandler = removedFile => {\n if (removedFile.id === file.id) controller.abort();\n };\n this.uppy.on('file-removed', removedHandler);\n this.resetUploaderReferences(file.id);\n const uploadPromise = this.uploadRemoteFile(file, {\n signal: controller.signal\n });\n this.requests.wrapSyncFunction(() => {\n this.uppy.off('file-removed', removedHandler);\n }, {\n priority: -1\n })();\n return uploadPromise;\n }\n return _classPrivateFieldLooseBase(this, _uploadFile)[_uploadFile](file);\n });\n const upload = await Promise.all(promises);\n // After the upload is done, another upload may happen with only local files.\n // We reset the capability so that the next upload can use resumable uploads.\n _classPrivateFieldLooseBase(this, _setResumableUploadsCapability)[_setResumableUploadsCapability](true);\n return upload;\n }\n });\n Object.defineProperty(this, _setCompanionHeaders, {\n writable: true,\n value: () => {\n _classPrivateFieldLooseBase(this, _client)[_client].setCompanionHeaders(this.opts.companionHeaders);\n }\n });\n Object.defineProperty(this, _setResumableUploadsCapability, {\n writable: true,\n value: boolean => {\n const {\n capabilities\n } = this.uppy.getState();\n this.uppy.setState({\n capabilities: {\n ...capabilities,\n resumableUploads: boolean\n }\n });\n }\n });\n Object.defineProperty(this, _resetResumableCapability, {\n writable: true,\n value: () => {\n _classPrivateFieldLooseBase(this, _setResumableUploadsCapability)[_setResumableUploadsCapability](true);\n }\n });\n this.type = 'uploader';\n this.id = this.opts.id || 'AwsS3Multipart';\n this.title = 'AWS S3 Multipart';\n _classPrivateFieldLooseBase(this, _client)[_client] = new RequestClient(uppy, _opts);\n const defaultOptions = {\n // TODO: null here means “include all”, [] means include none.\n // This is inconsistent with @uppy/aws-s3 and @uppy/transloadit\n allowedMetaFields: null,\n limit: 6,\n shouldUseMultipart: file => file.size !== 0,\n // TODO: Switch default to:\n // eslint-disable-next-line no-bitwise\n // shouldUseMultipart: (file) => file.size >> 10 >> 10 > 100,\n retryDelays: [0, 1000, 3000, 5000],\n createMultipartUpload: this.createMultipartUpload.bind(this),\n listParts: this.listParts.bind(this),\n abortMultipartUpload: this.abortMultipartUpload.bind(this),\n completeMultipartUpload: this.completeMultipartUpload.bind(this),\n getTemporarySecurityCredentials: false,\n signPart: _opts != null && _opts.getTemporarySecurityCredentials ? this.createSignedURL.bind(this) : this.signPart.bind(this),\n uploadPartBytes: AwsS3Multipart.uploadPartBytes,\n getUploadParameters: _opts != null && _opts.getTemporarySecurityCredentials ? this.createSignedURL.bind(this) : this.getUploadParameters.bind(this),\n companionHeaders: {}\n };\n this.opts = {\n ...defaultOptions,\n ..._opts\n };\n if ((_opts == null ? void 0 : _opts.prepareUploadParts) != null && _opts.signPart == null) {\n this.opts.signPart = async (file, _ref4) => {\n let {\n uploadId,\n key,\n partNumber,\n body,\n signal\n } = _ref4;\n const {\n presignedUrls,\n headers\n } = await _opts.prepareUploadParts(file, {\n uploadId,\n key,\n parts: [{\n number: partNumber,\n chunk: body\n }],\n signal\n });\n return {\n url: presignedUrls == null ? void 0 : presignedUrls[partNumber],\n headers: headers == null ? void 0 : headers[partNumber]\n };\n };\n }\n\n /**\n * Simultaneous upload limiting is shared across all uploads with this plugin.\n *\n * @type {RateLimitedQueue}\n */\n this.requests = (_this$opts$rateLimite = this.opts.rateLimitedQueue) != null ? _this$opts$rateLimite : new RateLimitedQueue(this.opts.limit);\n _classPrivateFieldLooseBase(this, _companionCommunicationQueue)[_companionCommunicationQueue] = new HTTPCommunicationQueue(this.requests, this.opts, _classPrivateFieldLooseBase(this, _setS3MultipartState2)[_setS3MultipartState2], _classPrivateFieldLooseBase(this, _getFile2)[_getFile2]);\n this.uploaders = Object.create(null);\n this.uploaderEvents = Object.create(null);\n this.uploaderSockets = Object.create(null);\n this.setQueueRequestSocketToken(this.requests.wrapPromiseFunction(_classPrivateFieldLooseBase(this, _requestSocketToken)[_requestSocketToken], {\n priority: -1\n }));\n }\n [_Symbol$for]() {\n return _classPrivateFieldLooseBase(this, _client)[_client];\n }\n setOptions(newOptions) {\n _classPrivateFieldLooseBase(this, _companionCommunicationQueue)[_companionCommunicationQueue].setOptions(newOptions);\n return super.setOptions(newOptions);\n }\n\n /**\n * Clean up all references for a file's upload: the MultipartUploader instance,\n * any events related to the file, and the Companion WebSocket connection.\n *\n * Set `opts.abort` to tell S3 that the multipart upload is cancelled and must be removed.\n * This should be done when the user cancels the upload, not when the upload is completed or errored.\n */\n resetUploaderReferences(fileID, opts) {\n if (opts === void 0) {\n opts = {};\n }\n if (this.uploaders[fileID]) {\n this.uploaders[fileID].abort({\n really: opts.abort || false\n });\n this.uploaders[fileID] = null;\n }\n if (this.uploaderEvents[fileID]) {\n this.uploaderEvents[fileID].remove();\n this.uploaderEvents[fileID] = null;\n }\n if (this.uploaderSockets[fileID]) {\n this.uploaderSockets[fileID].close();\n this.uploaderSockets[fileID] = null;\n }\n }\n\n // TODO: make this a private method in the next major\n assertHost(method) {\n if (!this.opts.companionUrl) {\n throw new Error(`Expected a \\`companionUrl\\` option containing a Companion address, or if you are not using Companion, a custom \\`${method}\\` implementation.`);\n }\n }\n createMultipartUpload(file, signal) {\n this.assertHost('createMultipartUpload');\n throwIfAborted(signal);\n const metadata = getAllowedMetadata({\n meta: file.meta,\n allowedMetaFields: this.opts.allowedMetaFields\n });\n return _classPrivateFieldLooseBase(this, _client)[_client].post('s3/multipart', {\n filename: file.name,\n type: file.type,\n metadata\n }, {\n signal\n }).then(assertServerError);\n }\n listParts(file, _ref5, signal) {\n let {\n key,\n uploadId\n } = _ref5;\n this.assertHost('listParts');\n throwIfAborted(signal);\n const filename = encodeURIComponent(key);\n return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/multipart/${uploadId}?key=${filename}`, {\n signal\n }).then(assertServerError);\n }\n completeMultipartUpload(file, _ref6, signal) {\n let {\n key,\n uploadId,\n parts\n } = _ref6;\n this.assertHost('completeMultipartUpload');\n throwIfAborted(signal);\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n return _classPrivateFieldLooseBase(this, _client)[_client].post(`s3/multipart/${uploadIdEnc}/complete?key=${filename}`, {\n parts\n }, {\n signal\n }).then(assertServerError);\n }\n async createSignedURL(file, options) {\n const data = await _classPrivateFieldLooseBase(this, _getTemporarySecurityCredentials)[_getTemporarySecurityCredentials](options);\n const expires = getExpiry(data.credentials) || 604800; // 604 800 is the max value accepted by AWS.\n\n const {\n uploadId,\n key,\n partNumber,\n signal\n } = options;\n\n // Return an object in the correct shape.\n return {\n method: 'PUT',\n expires,\n fields: {},\n url: `${await createSignedURL({\n accountKey: data.credentials.AccessKeyId,\n accountSecret: data.credentials.SecretAccessKey,\n sessionToken: data.credentials.SessionToken,\n expires,\n bucketName: data.bucket,\n Region: data.region,\n Key: key != null ? key : `${crypto.randomUUID()}-${file.name}`,\n uploadId,\n partNumber,\n signal\n })}`,\n // Provide content type header required by S3\n headers: {\n 'Content-Type': file.type\n }\n };\n }\n signPart(file, _ref7) {\n let {\n uploadId,\n key,\n partNumber,\n signal\n } = _ref7;\n this.assertHost('signPart');\n throwIfAborted(signal);\n if (uploadId == null || key == null || partNumber == null) {\n throw new Error('Cannot sign without a key, an uploadId, and a partNumber');\n }\n const filename = encodeURIComponent(key);\n return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/multipart/${uploadId}/${partNumber}?key=${filename}`, {\n signal\n }).then(assertServerError);\n }\n abortMultipartUpload(file, _ref8, signal) {\n let {\n key,\n uploadId\n } = _ref8;\n this.assertHost('abortMultipartUpload');\n const filename = encodeURIComponent(key);\n const uploadIdEnc = encodeURIComponent(uploadId);\n return _classPrivateFieldLooseBase(this, _client)[_client].delete(`s3/multipart/${uploadIdEnc}?key=${filename}`, undefined, {\n signal\n }).then(assertServerError);\n }\n getUploadParameters(file, options) {\n const {\n meta\n } = file;\n const {\n type,\n name: filename\n } = meta;\n const metadata = getAllowedMetadata({\n meta,\n allowedMetaFields: this.opts.allowedMetaFields,\n querify: true\n });\n const query = new URLSearchParams({\n filename,\n type,\n ...metadata\n });\n return _classPrivateFieldLooseBase(this, _client)[_client].get(`s3/params?${query}`, options);\n }\n static async uploadPartBytes(_ref9) {\n let {\n signature: {\n url,\n expires,\n headers,\n method = 'PUT'\n },\n body,\n size = body.size,\n onProgress,\n onComplete,\n signal\n } = _ref9;\n throwIfAborted(signal);\n if (url == null) {\n throw new Error('Cannot upload to an undefined URL');\n }\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(method, url, true);\n if (headers) {\n Object.keys(headers).forEach(key => {\n xhr.setRequestHeader(key, headers[key]);\n });\n }\n xhr.responseType = 'text';\n if (typeof expires === 'number') {\n xhr.timeout = expires * 1000;\n }\n function onabort() {\n xhr.abort();\n }\n function cleanup() {\n signal.removeEventListener('abort', onabort);\n }\n signal.addEventListener('abort', onabort);\n xhr.upload.addEventListener('progress', ev => {\n onProgress(ev);\n });\n xhr.addEventListener('abort', () => {\n cleanup();\n reject(createAbortError());\n });\n xhr.addEventListener('timeout', () => {\n cleanup();\n const error = new Error('Request has expired');\n error.source = {\n status: 403\n };\n reject(error);\n });\n xhr.addEventListener('load', ev => {\n cleanup();\n if (ev.target.status === 403 && ev.target.responseText.includes('Request has expired')) {\n const error = new Error('Request has expired');\n error.source = ev.target;\n reject(error);\n return;\n }\n if (ev.target.status < 200 || ev.target.status >= 300) {\n const error = new Error('Non 2xx');\n error.source = ev.target;\n reject(error);\n return;\n }\n\n // todo make a proper onProgress API (breaking change)\n onProgress == null ? void 0 : onProgress({\n loaded: size,\n lengthComputable: true\n });\n\n // NOTE This must be allowed by CORS.\n const etag = ev.target.getResponseHeader('ETag');\n if (etag === null) {\n reject(new Error('AwsS3/Multipart: Could not read the ETag header. This likely means CORS is not configured correctly on the S3 Bucket. See https://uppy.io/docs/aws-s3-multipart#S3-Bucket-Configuration for instructions.'));\n return;\n }\n onComplete == null ? void 0 : onComplete(etag);\n resolve({\n ETag: etag\n });\n });\n xhr.addEventListener('error', ev => {\n cleanup();\n const error = new Error('Unknown error');\n error.source = ev.target;\n reject(error);\n });\n xhr.send(body);\n });\n }\n async connectToServerSocket(file) {\n var _this = this;\n return new Promise((resolve, reject) => {\n let queuedRequest;\n const token = file.serverToken;\n const host = getSocketHost(file.remote.companionUrl);\n const socket = new Socket({\n target: `${host}/api/${token}`,\n autoOpen: false\n });\n this.uploaderSockets[file.id] = socket;\n this.uploaderEvents[file.id] = new EventManager(this.uppy);\n this.onFileRemove(file.id, () => {\n socket.send('cancel', {});\n queuedRequest.abort();\n this.resetUploaderReferences(file.id, {\n abort: true\n });\n resolve(`upload ${file.id} was removed`);\n });\n this.onFilePause(file.id, isPaused => {\n if (isPaused) {\n // Remove this file from the queue so another file can start in its place.\n socket.send('pause', {});\n queuedRequest.abort();\n } else {\n // Resuming an upload should be queued, else you could pause and then\n // resume a queued upload to make it skip the queue.\n queuedRequest.abort();\n queuedRequest = this.requests.run(() => {\n socket.open();\n socket.send('resume', {});\n return () => {};\n });\n }\n });\n this.onPauseAll(file.id, () => {\n // First send the message, then call .abort,\n // just to make sure socket is not closed, which .abort used to do\n socket.send('pause', {});\n queuedRequest.abort();\n });\n this.onCancelAll(file.id, function (_temp) {\n let {\n reason\n } = _temp === void 0 ? {} : _temp;\n if (reason === 'user') {\n socket.send('cancel', {});\n queuedRequest.abort();\n _this.resetUploaderReferences(file.id);\n }\n resolve(`upload ${file.id} was canceled`);\n });\n this.onResumeAll(file.id, () => {\n queuedRequest.abort();\n if (file.error) {\n socket.send('pause', {});\n }\n queuedRequest = this.requests.run(() => {\n socket.open();\n socket.send('resume', {});\n return () => {};\n });\n });\n this.onRetry(file.id, () => {\n // Only do the retry if the upload is actually in progress;\n // else we could try to send these messages when the upload is still queued.\n // We may need a better check for this since the socket may also be closed\n // for other reasons, like network failures.\n if (socket.isOpen) {\n socket.send('pause', {});\n socket.send('resume', {});\n }\n });\n this.onRetryAll(file.id, () => {\n if (socket.isOpen) {\n socket.send('pause', {});\n socket.send('resume', {});\n }\n });\n socket.on('progress', progressData => emitSocketProgress(this, progressData, file));\n socket.on('error', errData => {\n this.uppy.emit('upload-error', file, new Error(errData.error));\n this.resetUploaderReferences(file.id);\n socket.close();\n queuedRequest.done();\n reject(new Error(errData.error));\n });\n socket.on('success', data => {\n const uploadResp = {\n uploadURL: data.url\n };\n this.uppy.emit('upload-success', file, uploadResp);\n this.resetUploaderReferences(file.id);\n socket.close();\n queuedRequest.done();\n resolve();\n });\n queuedRequest = this.requests.run(() => {\n if (file.isPaused) {\n socket.send('pause', {});\n } else {\n socket.open();\n }\n return () => {};\n });\n });\n }\n onFileRemove(fileID, cb) {\n this.uploaderEvents[fileID].on('file-removed', file => {\n if (fileID === file.id) cb(file.id);\n });\n }\n onFilePause(fileID, cb) {\n this.uploaderEvents[fileID].on('upload-pause', (targetFileID, isPaused) => {\n if (fileID === targetFileID) {\n cb(isPaused);\n }\n });\n }\n onRetry(fileID, cb) {\n this.uploaderEvents[fileID].on('upload-retry', targetFileID => {\n if (fileID === targetFileID) {\n cb();\n }\n });\n }\n onRetryAll(fileID, cb) {\n this.uploaderEvents[fileID].on('retry-all', () => {\n if (!this.uppy.getFile(fileID)) return;\n cb();\n });\n }\n onPauseAll(fileID, cb) {\n this.uploaderEvents[fileID].on('pause-all', () => {\n if (!this.uppy.getFile(fileID)) return;\n cb();\n });\n }\n onCancelAll(fileID, eventHandler) {\n var _this2 = this;\n this.uploaderEvents[fileID].on('cancel-all', function () {\n if (!_this2.uppy.getFile(fileID)) return;\n eventHandler(...arguments);\n });\n }\n onResumeAll(fileID, cb) {\n this.uploaderEvents[fileID].on('resume-all', () => {\n if (!this.uppy.getFile(fileID)) return;\n cb();\n });\n }\n install() {\n _classPrivateFieldLooseBase(this, _setResumableUploadsCapability)[_setResumableUploadsCapability](true);\n this.uppy.addPreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n this.uppy.addUploader(_classPrivateFieldLooseBase(this, _upload)[_upload]);\n this.uppy.on('cancel-all', _classPrivateFieldLooseBase(this, _resetResumableCapability)[_resetResumableCapability]);\n }\n uninstall() {\n this.uppy.removePreProcessor(_classPrivateFieldLooseBase(this, _setCompanionHeaders)[_setCompanionHeaders]);\n this.uppy.removeUploader(_classPrivateFieldLooseBase(this, _upload)[_upload]);\n this.uppy.off('cancel-all', _classPrivateFieldLooseBase(this, _resetResumableCapability)[_resetResumableCapability]);\n }\n}\nasync function _getTemporarySecurityCredentials2(options) {\n throwIfAborted(options == null ? void 0 : options.signal);\n if (_classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials] == null) {\n // We do not await it just yet, so concurrent calls do not try to override it:\n if (this.opts.getTemporarySecurityCredentials === true) {\n this.assertHost('getTemporarySecurityCredentials');\n _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials] = _classPrivateFieldLooseBase(this, _client)[_client].get('s3/sts', null, options).then(assertServerError);\n } else {\n _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials] = this.opts.getTemporarySecurityCredentials(options);\n }\n _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials] = await _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials];\n setTimeout(() => {\n // At half the time left before expiration, we clear the cache. That's\n // an arbitrary tradeoff to limit the number of requests made to the\n // remote while limiting the risk of using an expired token in case the\n // clocks are not exactly synced.\n // The HTTP cache should be configured to ensure a client doesn't request\n // more tokens than it needs, but this timeout provides a second layer of\n // security in case the HTTP cache is disabled or misconfigured.\n _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials] = null;\n }, (getExpiry(_classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials].credentials) || 0) * 500);\n }\n return _classPrivateFieldLooseBase(this, _cachedTemporaryCredentials)[_cachedTemporaryCredentials];\n}\nfunction _uploadFile2(file) {\n var _this3 = this;\n return new Promise((resolve, reject) => {\n const onProgress = (bytesUploaded, bytesTotal) => {\n this.uppy.emit('upload-progress', file, {\n uploader: this,\n bytesUploaded,\n bytesTotal\n });\n };\n const onError = err => {\n this.uppy.log(err);\n this.uppy.emit('upload-error', file, err);\n this.resetUploaderReferences(file.id);\n reject(err);\n };\n const onSuccess = result => {\n const uploadResp = {\n body: {\n ...result\n },\n uploadURL: result.location\n };\n this.resetUploaderReferences(file.id);\n this.uppy.emit('upload-success', _classPrivateFieldLooseBase(this, _getFile2)[_getFile2](file), uploadResp);\n if (result.location) {\n this.uppy.log(`Download ${file.name} from ${result.location}`);\n }\n resolve();\n };\n const onPartComplete = part => {\n this.uppy.emit('s3-multipart:part-uploaded', _classPrivateFieldLooseBase(this, _getFile2)[_getFile2](file), part);\n };\n const upload = new MultipartUploader(file.data, {\n // .bind to pass the file object to each handler.\n companionComm: _classPrivateFieldLooseBase(this, _companionCommunicationQueue)[_companionCommunicationQueue],\n log: function () {\n return _this3.uppy.log(...arguments);\n },\n getChunkSize: this.opts.getChunkSize ? this.opts.getChunkSize.bind(this) : null,\n onProgress,\n onError,\n onSuccess,\n onPartComplete,\n file,\n shouldUseMultipart: this.opts.shouldUseMultipart,\n ...file.s3Multipart\n });\n this.uploaders[file.id] = upload;\n this.uploaderEvents[file.id] = new EventManager(this.uppy);\n this.onFileRemove(file.id, removed => {\n upload.abort();\n this.resetUploaderReferences(file.id, {\n abort: true\n });\n resolve(`upload ${removed.id} was removed`);\n });\n this.onCancelAll(file.id, function (_temp2) {\n let {\n reason\n } = _temp2 === void 0 ? {} : _temp2;\n if (reason === 'user') {\n upload.abort();\n _this3.resetUploaderReferences(file.id, {\n abort: true\n });\n }\n resolve(`upload ${file.id} was canceled`);\n });\n this.onFilePause(file.id, isPaused => {\n if (isPaused) {\n upload.pause();\n } else {\n upload.start();\n }\n });\n this.onPauseAll(file.id, () => {\n upload.pause();\n });\n this.onResumeAll(file.id, () => {\n upload.start();\n });\n upload.start();\n });\n}\nAwsS3Multipart.VERSION = packageJson.version;","import throttle from 'lodash/throttle.js';\nimport BasePlugin from '@uppy/core/lib/BasePlugin.js';\nimport ServiceWorkerStore from './ServiceWorkerStore.js';\nimport IndexedDBStore from './IndexedDBStore.js';\nimport MetaDataStore from './MetaDataStore.js';\nconst packageJson = {\n \"version\": \"3.1.0\"\n};\n/**\n * The GoldenRetriever plugin — restores selected files and resumes uploads\n * after a closed tab or a browser crash!\n *\n * Uses localStorage, IndexedDB and ServiceWorker to do its magic, read more:\n * https://uppy.io/blog/2017/07/golden-retriever/\n */\nexport default class GoldenRetriever extends BasePlugin {\n constructor(uppy, opts) {\n super(uppy, opts);\n this.addBlobToStores = file => {\n if (file.isRemote) return;\n if (this.ServiceWorkerStore) {\n this.ServiceWorkerStore.put(file).catch(err => {\n this.uppy.log('[GoldenRetriever] Could not store file', 'warning');\n this.uppy.log(err);\n });\n }\n this.IndexedDBStore.put(file).catch(err => {\n this.uppy.log('[GoldenRetriever] Could not store file', 'warning');\n this.uppy.log(err);\n });\n };\n this.removeBlobFromStores = file => {\n if (this.ServiceWorkerStore) {\n this.ServiceWorkerStore.delete(file.id).catch(err => {\n this.uppy.log('[GoldenRetriever] Failed to remove file', 'warning');\n this.uppy.log(err);\n });\n }\n this.IndexedDBStore.delete(file.id).catch(err => {\n this.uppy.log('[GoldenRetriever] Failed to remove file', 'warning');\n this.uppy.log(err);\n });\n };\n this.replaceBlobInStores = file => {\n this.removeBlobFromStores(file);\n this.addBlobToStores(file);\n };\n this.handleRestoreConfirmed = () => {\n this.uppy.log('[GoldenRetriever] Restore confirmed, proceeding...');\n // start all uploads again when file blobs are restored\n const {\n currentUploads\n } = this.uppy.getState();\n if (currentUploads) {\n this.uppy.resumeAll();\n Object.keys(currentUploads).forEach(uploadId => {\n this.uppy.restore(uploadId, currentUploads[uploadId]);\n });\n }\n this.uppy.setState({\n recoveredState: null\n });\n };\n this.abortRestore = () => {\n this.uppy.log('[GoldenRetriever] Aborting restore...');\n const fileIDs = Object.keys(this.uppy.getState().files);\n this.deleteBlobs(fileIDs).then(() => {\n this.uppy.log(`[GoldenRetriever] Removed ${fileIDs.length} files`);\n }).catch(err => {\n this.uppy.log(`[GoldenRetriever] Could not remove ${fileIDs.length} files`, 'warning');\n this.uppy.log(err);\n });\n this.uppy.cancelAll();\n this.uppy.setState({\n recoveredState: null\n });\n MetaDataStore.cleanup(this.uppy.opts.id);\n };\n this.handleComplete = _ref => {\n let {\n successful\n } = _ref;\n const fileIDs = successful.map(file => file.id);\n this.deleteBlobs(fileIDs).then(() => {\n this.uppy.log(`[GoldenRetriever] Removed ${successful.length} files that finished uploading`);\n }).catch(err => {\n this.uppy.log(`[GoldenRetriever] Could not remove ${successful.length} files that finished uploading`, 'warning');\n this.uppy.log(err);\n });\n this.uppy.setState({\n recoveredState: null\n });\n MetaDataStore.cleanup(this.uppy.opts.id);\n };\n this.restoreBlobs = () => {\n if (this.uppy.getFiles().length > 0) {\n Promise.all([this.loadFileBlobsFromServiceWorker(), this.loadFileBlobsFromIndexedDB()]).then(resultingArrayOfObjects => {\n const blobs = {\n ...resultingArrayOfObjects[0],\n ...resultingArrayOfObjects[1]\n };\n this.onBlobsLoaded(blobs);\n });\n } else {\n this.uppy.log('[GoldenRetriever] No files need to be loaded, only restoring processing state...');\n }\n };\n this.type = 'debugger';\n this.id = this.opts.id || 'GoldenRetriever';\n this.title = 'Golden Retriever';\n const defaultOptions = {\n expires: 24 * 60 * 60 * 1000,\n // 24 hours\n serviceWorker: false\n };\n this.opts = {\n ...defaultOptions,\n ...opts\n };\n this.MetaDataStore = new MetaDataStore({\n expires: this.opts.expires,\n storeName: uppy.getID()\n });\n this.ServiceWorkerStore = null;\n if (this.opts.serviceWorker) {\n this.ServiceWorkerStore = new ServiceWorkerStore({\n storeName: uppy.getID()\n });\n }\n this.IndexedDBStore = new IndexedDBStore({\n expires: this.opts.expires,\n ...(this.opts.indexedDB || {}),\n storeName: uppy.getID()\n });\n this.saveFilesStateToLocalStorage = throttle(this.saveFilesStateToLocalStorage.bind(this), 500, {\n leading: true,\n trailing: true\n });\n this.restoreState = this.restoreState.bind(this);\n this.loadFileBlobsFromServiceWorker = this.loadFileBlobsFromServiceWorker.bind(this);\n this.loadFileBlobsFromIndexedDB = this.loadFileBlobsFromIndexedDB.bind(this);\n this.onBlobsLoaded = this.onBlobsLoaded.bind(this);\n }\n restoreState() {\n const savedState = this.MetaDataStore.load();\n if (savedState) {\n this.uppy.log('[GoldenRetriever] Recovered some state from Local Storage');\n this.uppy.setState({\n currentUploads: savedState.currentUploads || {},\n files: savedState.files || {},\n recoveredState: savedState\n });\n this.savedPluginData = savedState.pluginData;\n }\n }\n\n /**\n * Get file objects that are currently waiting: they've been selected,\n * but aren't yet being uploaded.\n */\n getWaitingFiles() {\n const waitingFiles = {};\n this.uppy.getFiles().forEach(file => {\n if (!file.progress || !file.progress.uploadStarted) {\n waitingFiles[file.id] = file;\n }\n });\n return waitingFiles;\n }\n\n /**\n * Get file objects that are currently being uploaded. If a file has finished\n * uploading, but the other files in the same batch have not, the finished\n * file is also returned.\n */\n getUploadingFiles() {\n const uploadingFiles = {};\n const {\n currentUploads\n } = this.uppy.getState();\n if (currentUploads) {\n const uploadIDs = Object.keys(currentUploads);\n uploadIDs.forEach(uploadID => {\n const filesInUpload = currentUploads[uploadID].fileIDs;\n filesInUpload.forEach(fileID => {\n uploadingFiles[fileID] = this.uppy.getFile(fileID);\n });\n });\n }\n return uploadingFiles;\n }\n saveFilesStateToLocalStorage() {\n const filesToSave = {\n ...this.getWaitingFiles(),\n ...this.getUploadingFiles()\n };\n const fileToSaveEntries = Object.entries(filesToSave);\n\n // If all files have been removed by the user, clear recovery state\n if (fileToSaveEntries.length === 0) {\n if (this.uppy.getState().recoveredState !== null) {\n this.uppy.setState({\n recoveredState: null\n });\n }\n MetaDataStore.cleanup(this.uppy.opts.id);\n return;\n }\n\n // We dont’t need to store file.data on local files, because the actual blob will be restored later,\n // and we want to avoid having weird properties in the serialized object.\n // Also adding file.isRestored to all files, since they will be restored from local storage\n const filesToSaveWithoutData = Object.fromEntries(fileToSaveEntries.map(_ref2 => {\n let [id, fileInfo] = _ref2;\n return [id, fileInfo.isRemote ? {\n ...fileInfo,\n isRestored: true\n } : {\n ...fileInfo,\n isRestored: true,\n data: null,\n preview: null\n }];\n }));\n const pluginData = {};\n // TODO Find a better way to do this?\n // Other plugins can attach a restore:get-data listener that receives this callback.\n // Plugins can then use this callback (sync) to provide data to be stored.\n this.uppy.emit('restore:get-data', data => {\n Object.assign(pluginData, data);\n });\n const {\n currentUploads\n } = this.uppy.getState();\n this.MetaDataStore.save({\n currentUploads,\n files: filesToSaveWithoutData,\n pluginData\n });\n }\n loadFileBlobsFromServiceWorker() {\n if (!this.ServiceWorkerStore) {\n return Promise.resolve({});\n }\n return this.ServiceWorkerStore.list().then(blobs => {\n const numberOfFilesRecovered = Object.keys(blobs).length;\n if (numberOfFilesRecovered > 0) {\n this.uppy.log(`[GoldenRetriever] Successfully recovered ${numberOfFilesRecovered} blobs from Service Worker!`);\n return blobs;\n }\n this.uppy.log('[GoldenRetriever] No blobs found in Service Worker, trying IndexedDB now...');\n return {};\n }).catch(err => {\n this.uppy.log('[GoldenRetriever] Failed to recover blobs from Service Worker', 'warning');\n this.uppy.log(err);\n return {};\n });\n }\n loadFileBlobsFromIndexedDB() {\n return this.IndexedDBStore.list().then(blobs => {\n const numberOfFilesRecovered = Object.keys(blobs).length;\n if (numberOfFilesRecovered > 0) {\n this.uppy.log(`[GoldenRetriever] Successfully recovered ${numberOfFilesRecovered} blobs from IndexedDB!`);\n return blobs;\n }\n this.uppy.log('[GoldenRetriever] No blobs found in IndexedDB');\n return {};\n }).catch(err => {\n this.uppy.log('[GoldenRetriever] Failed to recover blobs from IndexedDB', 'warning');\n this.uppy.log(err);\n return {};\n });\n }\n onBlobsLoaded(blobs) {\n const obsoleteBlobs = [];\n const updatedFiles = {\n ...this.uppy.getState().files\n };\n\n // Loop through blobs that we can restore, add blobs to file objects\n Object.keys(blobs).forEach(fileID => {\n const originalFile = this.uppy.getFile(fileID);\n if (!originalFile) {\n obsoleteBlobs.push(fileID);\n return;\n }\n const cachedData = blobs[fileID];\n const updatedFileData = {\n data: cachedData,\n isRestored: true,\n isGhost: false\n };\n updatedFiles[fileID] = {\n ...originalFile,\n ...updatedFileData\n };\n });\n\n // Loop through files that we can’t restore fully — we only have meta, not blobs,\n // set .isGhost on them, also set isRestored to all files\n Object.keys(updatedFiles).forEach(fileID => {\n if (updatedFiles[fileID].data === null) {\n updatedFiles[fileID] = {\n ...updatedFiles[fileID],\n isGhost: true\n };\n }\n });\n this.uppy.setState({\n files: updatedFiles\n });\n this.uppy.emit('restored', this.savedPluginData);\n if (obsoleteBlobs.length) {\n this.deleteBlobs(obsoleteBlobs).then(() => {\n this.uppy.log(`[GoldenRetriever] Cleaned up ${obsoleteBlobs.length} old files`);\n }).catch(err => {\n this.uppy.log(`[GoldenRetriever] Could not clean up ${obsoleteBlobs.length} old files`, 'warning');\n this.uppy.log(err);\n });\n }\n }\n deleteBlobs(fileIDs) {\n return Promise.all(fileIDs.map(id => {\n var _this$ServiceWorkerSt, _this$ServiceWorkerSt2, _this$IndexedDBStore;\n return (_this$ServiceWorkerSt = (_this$ServiceWorkerSt2 = this.ServiceWorkerStore) == null ? void 0 : _this$ServiceWorkerSt2.delete(id)) != null ? _this$ServiceWorkerSt : (_this$IndexedDBStore = this.IndexedDBStore) == null ? void 0 : _this$IndexedDBStore.delete(id);\n }));\n }\n install() {\n this.restoreState();\n this.restoreBlobs();\n this.uppy.on('file-added', this.addBlobToStores);\n this.uppy.on('file-editor:complete', this.replaceBlobInStores);\n this.uppy.on('file-removed', this.removeBlobFromStores);\n // TODO: the `state-update` is bad practise. It fires on any state change in Uppy\n // or any state change in any of the plugins. We should to able to only listen\n // for the state changes we need, somehow.\n this.uppy.on('state-update', this.saveFilesStateToLocalStorage);\n this.uppy.on('restore-confirmed', this.handleRestoreConfirmed);\n this.uppy.on('restore-canceled', this.abortRestore);\n this.uppy.on('complete', this.handleComplete);\n }\n uninstall() {\n this.uppy.off('file-added', this.addBlobToStores);\n this.uppy.off('file-editor:complete', this.replaceBlobInStores);\n this.uppy.off('file-removed', this.removeBlobFromStores);\n this.uppy.off('state-update', this.saveFilesStateToLocalStorage);\n this.uppy.off('restore-confirmed', this.handleRestoreConfirmed);\n this.uppy.off('restore-canceled', this.abortRestore);\n this.uppy.off('complete', this.handleComplete);\n }\n}\nGoldenRetriever.VERSION = packageJson.version;","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n \"version\": \"3.2.2\"\n};\nvar _callbacks = /*#__PURE__*/_classPrivateFieldLooseKey(\"callbacks\");\nvar _publish = /*#__PURE__*/_classPrivateFieldLooseKey(\"publish\");\n/**\n * Default store that keeps state in a simple object.\n */\nclass DefaultStore {\n constructor() {\n Object.defineProperty(this, _publish, {\n value: _publish2\n });\n this.state = {};\n Object.defineProperty(this, _callbacks, {\n writable: true,\n value: new Set()\n });\n }\n getState() {\n return this.state;\n }\n setState(patch) {\n const prevState = {\n ...this.state\n };\n const nextState = {\n ...this.state,\n ...patch\n };\n this.state = nextState;\n _classPrivateFieldLooseBase(this, _publish)[_publish](prevState, nextState, patch);\n }\n subscribe(listener) {\n _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].add(listener);\n return () => {\n _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].delete(listener);\n };\n }\n}\nfunction _publish2() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].forEach(listener => {\n listener(...args);\n });\n}\nDefaultStore.VERSION = packageJson.version;\nexport default DefaultStore;","import { UIPlugin } from '@uppy/core';\nimport dataURItoBlob from '@uppy/utils/lib/dataURItoBlob';\nimport isObjectURL from '@uppy/utils/lib/isObjectURL';\nimport isPreviewSupported from '@uppy/utils/lib/isPreviewSupported';\nimport { rotation } from 'exifr/dist/mini.esm.mjs';\nimport locale from './locale.js';\nconst packageJson = {\n \"version\": \"3.0.3\"\n};\n/**\n * Save a element's content to a Blob object.\n *\n * @param {HTMLCanvasElement} canvas\n * @returns {Promise}\n */\n\nfunction canvasToBlob(canvas, type, quality) {\n try {\n canvas.getContext('2d').getImageData(0, 0, 1, 1);\n } catch (err) {\n if (err.code === 18) {\n return Promise.reject(new Error('cannot read image, probably an svg with external resources'));\n }\n }\n\n if (canvas.toBlob) {\n return new Promise(resolve => {\n canvas.toBlob(resolve, type, quality);\n }).then(blob => {\n if (blob === null) {\n throw new Error('cannot read image, probably an svg with external resources');\n }\n\n return blob;\n });\n }\n\n return Promise.resolve().then(() => {\n return dataURItoBlob(canvas.toDataURL(type, quality), {});\n }).then(blob => {\n if (blob === null) {\n throw new Error('could not extract blob, probably an old browser');\n }\n\n return blob;\n });\n}\n\nfunction rotateImage(image, translate) {\n let w = image.width;\n let h = image.height;\n\n if (translate.deg === 90 || translate.deg === 270) {\n w = image.height;\n h = image.width;\n }\n\n const canvas = document.createElement('canvas');\n canvas.width = w;\n canvas.height = h;\n const context = canvas.getContext('2d');\n context.translate(w / 2, h / 2);\n\n if (translate.canvas) {\n context.rotate(translate.rad);\n context.scale(translate.scaleX, translate.scaleY);\n }\n\n context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);\n return canvas;\n}\n/**\n * Make sure the image doesn’t exceed browser/device canvas limits.\n * For ios with 256 RAM and ie\n */\n\n\nfunction protect(image) {\n // https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element\n const ratio = image.width / image.height;\n const maxSquare = 5000000; // ios max canvas square\n\n const maxSize = 4096; // ie max canvas dimensions\n\n let maxW = Math.floor(Math.sqrt(maxSquare * ratio));\n let maxH = Math.floor(maxSquare / Math.sqrt(maxSquare * ratio));\n\n if (maxW > maxSize) {\n maxW = maxSize;\n maxH = Math.round(maxW / ratio);\n }\n\n if (maxH > maxSize) {\n maxH = maxSize;\n maxW = Math.round(ratio * maxH);\n }\n\n if (image.width > maxW) {\n const canvas = document.createElement('canvas');\n canvas.width = maxW;\n canvas.height = maxH;\n canvas.getContext('2d').drawImage(image, 0, 0, maxW, maxH);\n return canvas;\n }\n\n return image;\n}\n/**\n * The Thumbnail Generator plugin\n */\n\n\nexport default class ThumbnailGenerator extends UIPlugin {\n constructor(uppy, opts) {\n super(uppy, opts);\n\n this.onFileAdded = file => {\n if (!file.preview && file.data && isPreviewSupported(file.type) && !file.isRemote) {\n this.addToQueue(file.id);\n }\n };\n\n this.onCancelRequest = file => {\n const index = this.queue.indexOf(file.id);\n\n if (index !== -1) {\n this.queue.splice(index, 1);\n }\n };\n\n this.onFileRemoved = file => {\n const index = this.queue.indexOf(file.id);\n\n if (index !== -1) {\n this.queue.splice(index, 1);\n } // Clean up object URLs.\n\n\n if (file.preview && isObjectURL(file.preview)) {\n URL.revokeObjectURL(file.preview);\n }\n };\n\n this.onRestored = () => {\n const restoredFiles = this.uppy.getFiles().filter(file => file.isRestored);\n restoredFiles.forEach(file => {\n // Only add blob URLs; they are likely invalid after being restored.\n if (!file.preview || isObjectURL(file.preview)) {\n this.addToQueue(file.id);\n }\n });\n };\n\n this.onAllFilesRemoved = () => {\n this.queue = [];\n };\n\n this.waitUntilAllProcessed = fileIDs => {\n fileIDs.forEach(fileID => {\n const file = this.uppy.getFile(fileID);\n this.uppy.emit('preprocess-progress', file, {\n mode: 'indeterminate',\n message: this.i18n('generatingThumbnails')\n });\n });\n\n const emitPreprocessCompleteForAll = () => {\n fileIDs.forEach(fileID => {\n const file = this.uppy.getFile(fileID);\n this.uppy.emit('preprocess-complete', file);\n });\n };\n\n return new Promise(resolve => {\n if (this.queueProcessing) {\n this.uppy.once('thumbnail:all-generated', () => {\n emitPreprocessCompleteForAll();\n resolve();\n });\n } else {\n emitPreprocessCompleteForAll();\n resolve();\n }\n });\n };\n\n this.type = 'modifier';\n this.id = this.opts.id || 'ThumbnailGenerator';\n this.title = 'Thumbnail Generator';\n this.queue = [];\n this.queueProcessing = false;\n this.defaultThumbnailDimension = 200;\n this.thumbnailType = this.opts.thumbnailType || 'image/jpeg';\n this.defaultLocale = locale;\n const defaultOptions = {\n thumbnailWidth: null,\n thumbnailHeight: null,\n waitForThumbnailsBeforeUpload: false,\n lazy: false\n };\n this.opts = { ...defaultOptions,\n ...opts\n };\n this.i18nInit();\n\n if (this.opts.lazy && this.opts.waitForThumbnailsBeforeUpload) {\n throw new Error('ThumbnailGenerator: The `lazy` and `waitForThumbnailsBeforeUpload` options are mutually exclusive. Please ensure at most one of them is set to `true`.');\n }\n }\n /**\n * Create a thumbnail for the given Uppy file object.\n *\n * @param {{data: Blob}} file\n * @param {number} targetWidth\n * @param {number} targetHeight\n * @returns {Promise}\n */\n\n\n createThumbnail(file, targetWidth, targetHeight) {\n const originalUrl = URL.createObjectURL(file.data);\n const onload = new Promise((resolve, reject) => {\n const image = new Image();\n image.src = originalUrl;\n image.addEventListener('load', () => {\n URL.revokeObjectURL(originalUrl);\n resolve(image);\n });\n image.addEventListener('error', event => {\n URL.revokeObjectURL(originalUrl);\n reject(event.error || new Error('Could not create thumbnail'));\n });\n });\n const orientationPromise = rotation(file.data).catch(() => 1);\n return Promise.all([onload, orientationPromise]).then(_ref => {\n let [image, orientation] = _ref;\n const dimensions = this.getProportionalDimensions(image, targetWidth, targetHeight, orientation.deg);\n const rotatedImage = rotateImage(image, orientation);\n const resizedImage = this.resizeImage(rotatedImage, dimensions.width, dimensions.height);\n return canvasToBlob(resizedImage, this.thumbnailType, 80);\n }).then(blob => {\n return URL.createObjectURL(blob);\n });\n }\n /**\n * Get the new calculated dimensions for the given image and a target width\n * or height. If both width and height are given, only width is taken into\n * account. If neither width nor height are given, the default dimension\n * is used.\n */\n\n\n getProportionalDimensions(img, width, height, rotation) {\n // eslint-disable-line no-shadow\n let aspect = img.width / img.height;\n\n if (rotation === 90 || rotation === 270) {\n aspect = img.height / img.width;\n }\n\n if (width != null) {\n return {\n width,\n height: Math.round(width / aspect)\n };\n }\n\n if (height != null) {\n return {\n width: Math.round(height * aspect),\n height\n };\n }\n\n return {\n width: this.defaultThumbnailDimension,\n height: Math.round(this.defaultThumbnailDimension / aspect)\n };\n }\n /**\n * Resize an image to the target `width` and `height`.\n *\n * Returns a Canvas with the resized image on it.\n */\n // eslint-disable-next-line class-methods-use-this\n\n\n resizeImage(image, targetWidth, targetHeight) {\n // Resizing in steps refactored to use a solution from\n // https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01\n let img = protect(image);\n let steps = Math.ceil(Math.log2(img.width / targetWidth));\n\n if (steps < 1) {\n steps = 1;\n }\n\n let sW = targetWidth * 2 ** (steps - 1);\n let sH = targetHeight * 2 ** (steps - 1);\n const x = 2;\n\n while (steps--) {\n const canvas = document.createElement('canvas');\n canvas.width = sW;\n canvas.height = sH;\n canvas.getContext('2d').drawImage(img, 0, 0, sW, sH);\n img = canvas;\n sW = Math.round(sW / x);\n sH = Math.round(sH / x);\n }\n\n return img;\n }\n /**\n * Set the preview URL for a file.\n */\n\n\n setPreviewURL(fileID, preview) {\n this.uppy.setFileState(fileID, {\n preview\n });\n }\n\n addToQueue(item) {\n this.queue.push(item);\n\n if (this.queueProcessing === false) {\n this.processQueue();\n }\n }\n\n processQueue() {\n this.queueProcessing = true;\n\n if (this.queue.length > 0) {\n const current = this.uppy.getFile(this.queue.shift());\n\n if (!current) {\n this.uppy.log('[ThumbnailGenerator] file was removed before a thumbnail could be generated, but not removed from the queue. This is probably a bug', 'error');\n return Promise.resolve();\n }\n\n return this.requestThumbnail(current).catch(() => {}) // eslint-disable-line node/handle-callback-err\n .then(() => this.processQueue());\n }\n\n this.queueProcessing = false;\n this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue');\n this.uppy.emit('thumbnail:all-generated');\n return Promise.resolve();\n }\n\n requestThumbnail(file) {\n if (isPreviewSupported(file.type) && !file.isRemote) {\n return this.createThumbnail(file, this.opts.thumbnailWidth, this.opts.thumbnailHeight).then(preview => {\n this.setPreviewURL(file.id, preview);\n this.uppy.log(`[ThumbnailGenerator] Generated thumbnail for ${file.id}`);\n this.uppy.emit('thumbnail:generated', this.uppy.getFile(file.id), preview);\n }).catch(err => {\n this.uppy.log(`[ThumbnailGenerator] Failed thumbnail for ${file.id}:`, 'warning');\n this.uppy.log(err, 'warning');\n this.uppy.emit('thumbnail:error', this.uppy.getFile(file.id), err);\n });\n }\n\n return Promise.resolve();\n }\n\n install() {\n this.uppy.on('file-removed', this.onFileRemoved);\n this.uppy.on('cancel-all', this.onAllFilesRemoved);\n\n if (this.opts.lazy) {\n this.uppy.on('thumbnail:request', this.onFileAdded);\n this.uppy.on('thumbnail:cancel', this.onCancelRequest);\n } else {\n this.uppy.on('file-added', this.onFileAdded);\n this.uppy.on('restored', this.onRestored);\n }\n\n if (this.opts.waitForThumbnailsBeforeUpload) {\n this.uppy.addPreProcessor(this.waitUntilAllProcessed);\n }\n }\n\n uninstall() {\n this.uppy.off('file-removed', this.onFileRemoved);\n this.uppy.off('cancel-all', this.onAllFilesRemoved);\n\n if (this.opts.lazy) {\n this.uppy.off('thumbnail:request', this.onFileAdded);\n this.uppy.off('thumbnail:cancel', this.onCancelRequest);\n } else {\n this.uppy.off('file-added', this.onFileAdded);\n this.uppy.off('restored', this.onRestored);\n }\n\n if (this.opts.waitForThumbnailsBeforeUpload) {\n this.uppy.removePreProcessor(this.waitUntilAllProcessed);\n }\n }\n\n}\nThumbnailGenerator.VERSION = packageJson.version;","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport UploaderPlugin from '@uppy/core/lib/UploaderPlugin.js';\nimport { nanoid } from 'nanoid/non-secure';\nimport { Provider, RequestClient, Socket } from '@uppy/companion-client';\nimport emitSocketProgress from '@uppy/utils/lib/emitSocketProgress';\nimport getSocketHost from '@uppy/utils/lib/getSocketHost';\nimport EventManager from '@uppy/utils/lib/EventManager';\nimport ProgressTimeout from '@uppy/utils/lib/ProgressTimeout';\nimport { RateLimitedQueue, internalRateLimitedQueue } from '@uppy/utils/lib/RateLimitedQueue';\nimport NetworkError from '@uppy/utils/lib/NetworkError';\nimport isNetworkError from '@uppy/utils/lib/isNetworkError';\nimport { filterNonFailedFiles, filterFilesToEmitUploadStarted } from '@uppy/utils/lib/fileFilters';\nconst packageJson = {\n \"version\": \"3.3.1\"\n};\nimport locale from './locale.js';\nfunction buildResponseError(xhr, err) {\n let error = err;\n // No error message\n if (!error) error = new Error('Upload error');\n // Got an error message string\n if (typeof error === 'string') error = new Error(error);\n // Got something else\n if (!(error instanceof Error)) {\n error = Object.assign(new Error('Upload error'), {\n data: error\n });\n }\n if (isNetworkError(xhr)) {\n error = new NetworkError(error, xhr);\n return error;\n }\n error.request = xhr;\n return error;\n}\n\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n *\n * @param {object} file File object with `data`, `size` and `meta` properties\n * @returns {object} blob updated with the new `type` set from `file.meta.type`\n */\nfunction setTypeInBlob(file) {\n const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n return dataWithUpdatedType;\n}\nvar _upload = /*#__PURE__*/_classPrivateFieldLooseKey(\"upload\");\nvar _requestSocketToken = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestSocketToken\");\nvar _uploadBundle = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadBundle\");\nvar _uploadFiles = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadFiles\");\nvar _handleUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleUpload\");\nexport default class XHRUpload extends UploaderPlugin {\n constructor(uppy, _opts) {\n super(uppy, _opts);\n Object.defineProperty(this, _uploadFiles, {\n value: _uploadFiles2\n });\n Object.defineProperty(this, _uploadBundle, {\n value: _uploadBundle2\n });\n Object.defineProperty(this, _upload, {\n value: _upload2\n });\n Object.defineProperty(this, _requestSocketToken, {\n writable: true,\n value: async (file, options) => {\n const opts = this.getOptions(file);\n const Client = file.remote.providerOptions.provider ? Provider : RequestClient;\n const client = new Client(this.uppy, file.remote.providerOptions);\n const allowedMetaFields = Array.isArray(opts.allowedMetaFields) ? opts.allowedMetaFields\n // Send along all fields by default.\n : Object.keys(file.meta);\n const res = await client.post(file.remote.url, {\n ...file.remote.body,\n protocol: 'multipart',\n endpoint: opts.endpoint,\n size: file.data.size,\n fieldname: opts.fieldName,\n metadata: Object.fromEntries(allowedMetaFields.map(name => [name, file.meta[name]])),\n httpMethod: opts.method,\n useFormData: opts.formData,\n headers: opts.headers\n }, options);\n return res.token;\n }\n });\n Object.defineProperty(this, _handleUpload, {\n writable: true,\n value: async fileIDs => {\n if (fileIDs.length === 0) {\n this.uppy.log('[XHRUpload] No files to upload!');\n return;\n }\n\n // No limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin\n // (basically just AwsS3) using the internal symbol\n if (this.opts.limit === 0 && !this.opts[internalRateLimitedQueue]) {\n this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n }\n this.uppy.log('[XHRUpload] Uploading...');\n const files = this.uppy.getFilesByIds(fileIDs);\n const filesFiltered = filterNonFailedFiles(files);\n const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n this.uppy.emit('upload-start', filesToEmit);\n if (this.opts.bundle) {\n // if bundle: true, we don’t support remote uploads\n const isSomeFileRemote = filesFiltered.some(file => file.isRemote);\n if (isSomeFileRemote) {\n throw new Error('Can’t upload remote files when the `bundle: true` option is set');\n }\n if (typeof this.opts.headers === 'function') {\n throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n }\n await _classPrivateFieldLooseBase(this, _uploadBundle)[_uploadBundle](filesFiltered);\n } else {\n await _classPrivateFieldLooseBase(this, _uploadFiles)[_uploadFiles](filesFiltered);\n }\n }\n });\n this.type = 'uploader';\n this.id = this.opts.id || 'XHRUpload';\n this.title = 'XHRUpload';\n this.defaultLocale = locale;\n\n // Default options\n const defaultOptions = {\n formData: true,\n fieldName: _opts.bundle ? 'files[]' : 'file',\n method: 'post',\n allowedMetaFields: null,\n responseUrlFieldName: 'url',\n bundle: false,\n headers: {},\n timeout: 30 * 1000,\n limit: 5,\n withCredentials: false,\n responseType: '',\n /**\n * @param {string} responseText the response body string\n */\n getResponseData(responseText) {\n let parsedResponse = {};\n try {\n parsedResponse = JSON.parse(responseText);\n } catch (err) {\n uppy.log(err);\n }\n return parsedResponse;\n },\n /**\n *\n * @param {string} _ the response body string\n * @param {XMLHttpRequest | respObj} response the response object (XHR or similar)\n */\n getResponseError(_, response) {\n let error = new Error('Upload error');\n if (isNetworkError(response)) {\n error = new NetworkError(error, response);\n }\n return error;\n },\n /**\n * Check if the response from the upload endpoint indicates that the upload was successful.\n *\n * @param {number} status the response status code\n */\n validateStatus(status) {\n return status >= 200 && status < 300;\n }\n };\n this.opts = {\n ...defaultOptions,\n ..._opts\n };\n this.i18nInit();\n\n // Simultaneous upload limiting is shared across all uploads with this plugin.\n if (internalRateLimitedQueue in this.opts) {\n this.requests = this.opts[internalRateLimitedQueue];\n } else {\n this.requests = new RateLimitedQueue(this.opts.limit);\n }\n if (this.opts.bundle && !this.opts.formData) {\n throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n }\n if ((_opts == null ? void 0 : _opts.allowedMetaFields) === undefined && 'metaFields' in this.opts) {\n throw new Error('The `metaFields` option has been renamed to `allowedMetaFields`.');\n }\n this.uploaderEvents = Object.create(null);\n this.setQueueRequestSocketToken(this.requests.wrapPromiseFunction(_classPrivateFieldLooseBase(this, _requestSocketToken)[_requestSocketToken], {\n priority: -1\n }));\n }\n getOptions(file) {\n const overrides = this.uppy.getState().xhrUpload;\n const {\n headers\n } = this.opts;\n const opts = {\n ...this.opts,\n ...(overrides || {}),\n ...(file.xhrUpload || {}),\n headers: {}\n };\n // Support for `headers` as a function, only in the XHRUpload settings.\n // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n //\n // ```js\n // headers: (file) => ({ expires: file.meta.expires })\n // ```\n if (typeof headers === 'function') {\n opts.headers = headers(file);\n } else {\n Object.assign(opts.headers, this.opts.headers);\n }\n if (overrides) {\n Object.assign(opts.headers, overrides.headers);\n }\n if (file.xhrUpload) {\n Object.assign(opts.headers, file.xhrUpload.headers);\n }\n return opts;\n }\n\n // eslint-disable-next-line class-methods-use-this\n addMetadata(formData, meta, opts) {\n const allowedMetaFields = Array.isArray(opts.allowedMetaFields) ? opts.allowedMetaFields : Object.keys(meta); // Send along all fields by default.\n\n allowedMetaFields.forEach(item => {\n if (Array.isArray(meta[item])) {\n // In this case we don't transform `item` to add brackets, it's up to\n // the user to add the brackets so it won't be overridden.\n meta[item].forEach(subItem => formData.append(item, subItem));\n } else {\n formData.append(item, meta[item]);\n }\n });\n }\n createFormDataUpload(file, opts) {\n const formPost = new FormData();\n this.addMetadata(formPost, file.meta, opts);\n const dataWithUpdatedType = setTypeInBlob(file);\n if (file.name) {\n formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n } else {\n formPost.append(opts.fieldName, dataWithUpdatedType);\n }\n return formPost;\n }\n createBundledUpload(files, opts) {\n const formPost = new FormData();\n const {\n meta\n } = this.uppy.getState();\n this.addMetadata(formPost, meta, opts);\n files.forEach(file => {\n const options = this.getOptions(file);\n const dataWithUpdatedType = setTypeInBlob(file);\n if (file.name) {\n formPost.append(options.fieldName, dataWithUpdatedType, file.name);\n } else {\n formPost.append(options.fieldName, dataWithUpdatedType);\n }\n });\n return formPost;\n }\n async connectToServerSocket(file) {\n return new Promise((resolve, reject) => {\n const opts = this.getOptions(file);\n const token = file.serverToken;\n const host = getSocketHost(file.remote.companionUrl);\n let socket;\n const createSocket = () => {\n if (socket != null) return;\n socket = new Socket({\n target: `${host}/api/${token}`\n });\n socket.on('progress', progressData => emitSocketProgress(this, progressData, file));\n socket.on('success', data => {\n const body = opts.getResponseData(data.response.responseText, data.response);\n const uploadURL = body[opts.responseUrlFieldName];\n const uploadResp = {\n status: data.response.status,\n body,\n uploadURL\n };\n this.uppy.emit('upload-success', file, uploadResp);\n queuedRequest.done(); // eslint-disable-line no-use-before-define\n socket.close();\n if (this.uploaderEvents[file.id]) {\n this.uploaderEvents[file.id].remove();\n this.uploaderEvents[file.id] = null;\n }\n return resolve();\n });\n socket.on('error', errData => {\n const resp = errData.response;\n const error = resp ? opts.getResponseError(resp.responseText, resp) : Object.assign(new Error(errData.error.message), {\n cause: errData.error\n });\n this.uppy.emit('upload-error', file, error);\n queuedRequest.done(); // eslint-disable-line no-use-before-define\n socket.close();\n if (this.uploaderEvents[file.id]) {\n this.uploaderEvents[file.id].remove();\n this.uploaderEvents[file.id] = null;\n }\n reject(error);\n });\n };\n this.uploaderEvents[file.id] = new EventManager(this.uppy);\n let queuedRequest = this.requests.run(() => {\n if (file.isPaused) {\n var _socket;\n (_socket = socket) == null ? void 0 : _socket.send('pause', {});\n } else {\n createSocket();\n }\n return () => {};\n });\n this.onFileRemove(file.id, () => {\n var _socket2;\n (_socket2 = socket) == null ? void 0 : _socket2.send('cancel', {});\n socket.close();\n queuedRequest.abort();\n resolve(`upload ${file.id} was removed`);\n });\n this.onCancelAll(file.id, function (_temp) {\n let {\n reason\n } = _temp === void 0 ? {} : _temp;\n if (reason === 'user') {\n var _socket3;\n (_socket3 = socket) == null ? void 0 : _socket3.send('cancel', {});\n queuedRequest.abort();\n // socket.close()\n }\n\n resolve(`upload ${file.id} was canceled`);\n });\n const onRetryRequest = () => {\n if (socket == null) {\n queuedRequest.abort();\n } else {\n queuedRequest.done();\n }\n queuedRequest = this.requests.run(() => {\n if (socket == null) {\n createSocket();\n }\n return () => {};\n });\n };\n this.onRetry(file.id, onRetryRequest);\n this.onRetryAll(file.id, onRetryRequest);\n }).catch(err => {\n this.uppy.emit('upload-error', file, err);\n return Promise.reject(err);\n });\n }\n onFileRemove(fileID, cb) {\n this.uploaderEvents[fileID].on('file-removed', file => {\n if (fileID === file.id) cb(file.id);\n });\n }\n onRetry(fileID, cb) {\n this.uploaderEvents[fileID].on('upload-retry', targetFileID => {\n if (fileID === targetFileID) {\n cb();\n }\n });\n }\n onRetryAll(fileID, cb) {\n this.uploaderEvents[fileID].on('retry-all', () => {\n if (!this.uppy.getFile(fileID)) return;\n cb();\n });\n }\n onCancelAll(fileID, eventHandler) {\n var _this = this;\n this.uploaderEvents[fileID].on('cancel-all', function () {\n if (!_this.uppy.getFile(fileID)) return;\n eventHandler(...arguments);\n });\n }\n install() {\n if (this.opts.bundle) {\n const {\n capabilities\n } = this.uppy.getState();\n this.uppy.setState({\n capabilities: {\n ...capabilities,\n individualCancellation: false\n }\n });\n }\n this.uppy.addUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n }\n uninstall() {\n if (this.opts.bundle) {\n const {\n capabilities\n } = this.uppy.getState();\n this.uppy.setState({\n capabilities: {\n ...capabilities,\n individualCancellation: true\n }\n });\n }\n this.uppy.removeUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n }\n}\nasync function _upload2(file, current, total) {\n const opts = this.getOptions(file);\n this.uppy.log(`uploading ${current} of ${total}`);\n return new Promise((resolve, reject) => {\n const data = opts.formData ? this.createFormDataUpload(file, opts) : file.data;\n const xhr = new XMLHttpRequest();\n this.uploaderEvents[file.id] = new EventManager(this.uppy);\n let queuedRequest;\n const timer = new ProgressTimeout(opts.timeout, () => {\n const error = new Error(this.i18n('uploadStalled', {\n seconds: Math.ceil(opts.timeout / 1000)\n }));\n this.uppy.emit('upload-stalled', error, [file]);\n });\n const id = nanoid();\n xhr.upload.addEventListener('loadstart', () => {\n this.uppy.log(`[XHRUpload] ${id} started`);\n });\n xhr.upload.addEventListener('progress', ev => {\n this.uppy.log(`[XHRUpload] ${id} progress: ${ev.loaded} / ${ev.total}`);\n // Begin checking for timeouts when progress starts, instead of loading,\n // to avoid timing out requests on browser concurrency queue\n timer.progress();\n if (ev.lengthComputable) {\n this.uppy.emit('upload-progress', file, {\n uploader: this,\n bytesUploaded: ev.loaded,\n bytesTotal: ev.total\n });\n }\n });\n xhr.addEventListener('load', () => {\n this.uppy.log(`[XHRUpload] ${id} finished`);\n timer.done();\n queuedRequest.done();\n if (this.uploaderEvents[file.id]) {\n this.uploaderEvents[file.id].remove();\n this.uploaderEvents[file.id] = null;\n }\n if (opts.validateStatus(xhr.status, xhr.responseText, xhr)) {\n const body = opts.getResponseData(xhr.responseText, xhr);\n const uploadURL = body[opts.responseUrlFieldName];\n const uploadResp = {\n status: xhr.status,\n body,\n uploadURL\n };\n this.uppy.emit('upload-success', file, uploadResp);\n if (uploadURL) {\n this.uppy.log(`Download ${file.name} from ${uploadURL}`);\n }\n return resolve(file);\n }\n const body = opts.getResponseData(xhr.responseText, xhr);\n const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n const response = {\n status: xhr.status,\n body\n };\n this.uppy.emit('upload-error', file, error, response);\n return reject(error);\n });\n xhr.addEventListener('error', () => {\n this.uppy.log(`[XHRUpload] ${id} errored`);\n timer.done();\n queuedRequest.done();\n if (this.uploaderEvents[file.id]) {\n this.uploaderEvents[file.id].remove();\n this.uploaderEvents[file.id] = null;\n }\n const error = buildResponseError(xhr, opts.getResponseError(xhr.responseText, xhr));\n this.uppy.emit('upload-error', file, error);\n return reject(error);\n });\n xhr.open(opts.method.toUpperCase(), opts.endpoint, true);\n // IE10 does not allow setting `withCredentials` and `responseType`\n // before `open()` is called.\n xhr.withCredentials = opts.withCredentials;\n if (opts.responseType !== '') {\n xhr.responseType = opts.responseType;\n }\n queuedRequest = this.requests.run(() => {\n // When using an authentication system like JWT, the bearer token goes as a header. This\n // header needs to be fresh each time the token is refreshed so computing and setting the\n // headers just before the upload starts enables this kind of authentication to work properly.\n // Otherwise, half-way through the list of uploads the token could be stale and the upload would fail.\n const currentOpts = this.getOptions(file);\n Object.keys(currentOpts.headers).forEach(header => {\n xhr.setRequestHeader(header, currentOpts.headers[header]);\n });\n xhr.send(data);\n return () => {\n timer.done();\n xhr.abort();\n };\n });\n this.onFileRemove(file.id, () => {\n queuedRequest.abort();\n reject(new Error('File removed'));\n });\n this.onCancelAll(file.id, _ref => {\n let {\n reason\n } = _ref;\n if (reason === 'user') {\n queuedRequest.abort();\n }\n reject(new Error('Upload cancelled'));\n });\n });\n}\nfunction _uploadBundle2(files) {\n return new Promise((resolve, reject) => {\n const {\n endpoint\n } = this.opts;\n const {\n method\n } = this.opts;\n const optsFromState = this.uppy.getState().xhrUpload;\n const formData = this.createBundledUpload(files, {\n ...this.opts,\n ...(optsFromState || {})\n });\n const xhr = new XMLHttpRequest();\n const emitError = error => {\n files.forEach(file => {\n this.uppy.emit('upload-error', file, error);\n });\n };\n const timer = new ProgressTimeout(this.opts.timeout, () => {\n const error = new Error(this.i18n('uploadStalled', {\n seconds: Math.ceil(this.opts.timeout / 1000)\n }));\n this.uppy.emit('upload-stalled', error, files);\n });\n xhr.upload.addEventListener('loadstart', () => {\n this.uppy.log('[XHRUpload] started uploading bundle');\n timer.progress();\n });\n xhr.upload.addEventListener('progress', ev => {\n timer.progress();\n if (!ev.lengthComputable) return;\n files.forEach(file => {\n this.uppy.emit('upload-progress', file, {\n uploader: this,\n bytesUploaded: ev.loaded / ev.total * file.size,\n bytesTotal: file.size\n });\n });\n });\n xhr.addEventListener('load', ev => {\n timer.done();\n if (this.opts.validateStatus(ev.target.status, xhr.responseText, xhr)) {\n const body = this.opts.getResponseData(xhr.responseText, xhr);\n const uploadResp = {\n status: ev.target.status,\n body\n };\n files.forEach(file => {\n this.uppy.emit('upload-success', file, uploadResp);\n });\n return resolve();\n }\n const error = this.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n error.request = xhr;\n emitError(error);\n return reject(error);\n });\n xhr.addEventListener('error', () => {\n timer.done();\n const error = this.opts.getResponseError(xhr.responseText, xhr) || new Error('Upload error');\n emitError(error);\n return reject(error);\n });\n this.uppy.on('cancel-all', function (_temp2) {\n let {\n reason\n } = _temp2 === void 0 ? {} : _temp2;\n if (reason !== 'user') return;\n timer.done();\n xhr.abort();\n });\n xhr.open(method.toUpperCase(), endpoint, true);\n // IE10 does not allow setting `withCredentials` and `responseType`\n // before `open()` is called.\n xhr.withCredentials = this.opts.withCredentials;\n if (this.opts.responseType !== '') {\n xhr.responseType = this.opts.responseType;\n }\n Object.keys(this.opts.headers).forEach(header => {\n xhr.setRequestHeader(header, this.opts.headers[header]);\n });\n xhr.send(formData);\n });\n}\nasync function _uploadFiles2(files) {\n await Promise.allSettled(files.map((file, i) => {\n const current = parseInt(i, 10) + 1;\n const total = files.length;\n if (file.isRemote) {\n const controller = new AbortController();\n const removedHandler = removedFile => {\n if (removedFile.id === file.id) controller.abort();\n };\n this.uppy.on('file-removed', removedHandler);\n const uploadPromise = this.uploadRemoteFile(file, {\n signal: controller.signal\n });\n this.requests.wrapSyncFunction(() => {\n this.uppy.off('file-removed', removedHandler);\n }, {\n priority: -1\n })();\n return uploadPromise;\n }\n return _classPrivateFieldLooseBase(this, _upload)[_upload](file, current, total);\n }));\n}\n// eslint-disable-next-line global-require\nXHRUpload.VERSION = packageJson.version;","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n return (size = defaultSize) => {\n let id = ''\n let i = size\n while (i--) {\n id += alphabet[(Math.random() * alphabet.length) | 0]\n }\n return id\n }\n}\nexport let nanoid = (size = 21) => {\n let id = ''\n let i = size\n while (i--) {\n id += urlAlphabet[(Math.random() * 64) | 0]\n }\n return id\n}\n","/* eslint-disable @typescript-eslint/adjacent-overload-signatures, @typescript-eslint/no-unused-vars */\n// This file is generated, do not edit! See ../scripts/generate-index.ts\nimport * as I from './internals.js';\nexport function compose(optic1, optic2) {\n return optic1.compose(optic2);\n}\nexport function optic() {\n return I.optic;\n}\nexport function optic_() {\n return I.optic;\n}\nexport function get(optic) {\n return (source) => I.get(optic._ref, source);\n}\nexport function preview(optic) {\n return (source) => I.preview(optic._ref, source);\n}\nexport function collect(optic) {\n return (source) => I.collect(optic._ref, source);\n}\nexport function modify(optic) {\n return (f) => (source) => I.modify(optic._ref, f, source);\n}\nexport function set(optic) {\n return (value) => (source) => I.set(optic._ref, value, source);\n}\nexport function remove(optic) {\n return (source) => I.remove(optic._ref, source);\n}\nexport { pipe } from './standalone/pipe.js';\n"],"names":["arrayMoveMutate","array","from","to","startIndex","length","endIndex","item","splice","module","exports","mutate","file","acceptedFiles","acceptedFilesArray","Array","isArray","split","fileName","name","mimeType","type","toLowerCase","baseMimeType","replace","some","validType","trim","charAt","endsWith","wildcard","reMimePartSplit","target","pattern","test","result","emitter","_fns","emit","event","arg1","arg2","arg3","arg4","arg5","arg6","toEmit","e","out","idx","indexOf","args","substring","keys","Object","i","l","key","concat","getListeners","fns","apply","emitAll","on","fn","push","once","this","one","arguments","off","keep","retry","networkErrorMsgs","AbortError","Error","constructor","message","super","originalError","stack","pRetry","input","options","Promise","resolve","reject","onFailedAttempt","retries","operation","attempt","async","attemptNumber","error","TypeError","stop","errorMessage","includes","retriesLeft","decorateErrorWithCounts","mainError","has","prototype","hasOwnProperty","decode","decodeURIComponent","encode","encodeURIComponent","stringify","obj","prefix","value","pairs","call","isNaN","join","parse","query","part","parser","exec","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","_objectSpread","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","configurable","writable","_slicedToArray","arr","_arrayWithHoles","_i","Symbol","iterator","_s","_e","_arr","_n","_d","next","done","err","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","n","toString","slice","_unsupportedIterableToArray","_nonIterableRest","len","arr2","getInvalidTypeRejectionErr","accept","messageSuffix","code","getTooLargeRejectionErr","maxSize","getTooSmallRejectionErr","minSize","TOO_MANY_FILES_REJECTION","fileAccepted","isAcceptable","fileMatchSize","isDefined","size","isPropagationStopped","cancelBubble","isEvtWithFiles","dataTransfer","types","files","onDocumentDragOver","preventDefault","composeEventHandlers","_len","_key","_len2","_key2","filePickerOptionsTypes","description","reduce","a","b","_excluded","_excluded2","_excluded3","_excluded4","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","Dropzone","forwardRef","_ref","ref","children","_useDropzone","useDropzone","open","props","useImperativeHandle","Fragment","displayName","defaultProps","disabled","getFilesFromEvent","Infinity","multiple","maxFiles","preventDropOnDocument","noClick","noKeyboard","noDrag","noDragEventsBubbling","validator","useFsAccessApi","propTypes","onFileDialogCancel","onFileDialogOpen","onDragEnter","onDragLeave","onDragOver","onDrop","onDropAccepted","onDropRejected","initialState","isFocused","isFileDialogActive","isDragActive","isDragAccept","isDragReject","draggedFiles","fileRejections","undefined","_defaultProps$options","onFileDialogOpenCb","useMemo","noop","onFileDialogCancelCb","rootRef","useRef","inputRef","_useReducer2","useReducer","reducer","state","dispatch","fsAccessApiWorksRef","window","isSecureContext","onWindowFocus","current","setTimeout","useEffect","addEventListener","removeEventListener","dragTargetsRef","onDocumentDrop","contains","document","onDragEnterCb","useCallback","persist","stopPropagation","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","then","onDragOverCb","hasFiles","dropEffect","_unused","onDragLeaveCb","targets","targetIdx","setFiles","_fileAccepted2","accepted","acceptError","_fileMatchSize2","sizeMatch","sizeError","customErrors","errors","onDropCb","openFileDialog","opts","showOpenFilePicker","handles","catch","v","DOMException","ABORT_ERR","SECURITY_ERR","isSecurityError","click","onKeyDownCb","isEqualNode","keyCode","onFocusCb","onBlurCb","onClickCb","userAgent","navigator","isIe","isEdge","isIeOrEdge","composeHandler","composeKeyboardHandler","composeDragHandler","getRootProps","_ref2","_ref2$refKey","refKey","role","onKeyDown","onFocus","onBlur","onClick","rest","tabIndex","onInputElementClick","getInputProps","_ref3","_ref3$refKey","onChange","style","display","fileCount","every","allFilesAccepted","action","port","protocol","_typeof","_defineProperties","descriptor","_toPropertyKey","_setPrototypeOf","p","setPrototypeOf","bind","__proto__","_getPrototypeOf","getPrototypeOf","arg","hint","prim","toPrimitive","res","String","_toPrimitive","defaultOptions","httpStack","fileReader","urlStorage","fingerprint","Upload","_BaseUpload","subClass","superClass","create","_inherits","Constructor","staticProps","Derived","hasNativeReflectConstruct","_super","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","Super","NewTarget","self","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","instance","_classCallCheck","url","_window","XMLHttpRequest","Blob","required","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","str","rules","address","isSpecial","NaN","ignore","hash","lolcation","loc","location","g","finaldestination","Url","unescape","pathname","href","scheme","extractProtocol","match","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","index","instructions","lastIndexOf","base","path","last","unshift","up","host","hostname","username","password","auth","origin","set","pop","char","ins","REGEXP_PARTS","WildcardMatcher","text","separator","hasWild","parts","map","classifyPart","ii","testParts","matches","partsCount","RegExp","matcher","_Symbol$for","_classPrivateFieldLooseBase","receiver","privateKey","id","_classPrivateFieldLooseKey","assertServerError","assign","getExpiry","credentials","expirationDate","Expiration","timeUntilExpiry","Math","floor","Date","now","getAllowedMetadata","meta","allowedMetaFields","querify","metaFields","fromEntries","throwIfAborted","signal","aborted","cause","reason","_abortMultipartUpload","_cache","_createMultipartUpload","_fetchSignature","_getUploadParameters","_listParts","_previousRetryDelay","_requests","_retryDelayIterator","_sendCompletionRequest","_setS3MultipartState","_uploadPartBytes","_getFile","_shouldRetry","_nonMultipartUpload","HTTPCommunicationQueue","_requests2","setS3MultipartState","getFile","_nonMultipartUpload2","_shouldRetry2","WeakMap","setOptions","requests","_options$retryDelays","wrapPromiseFunction","abortMultipartUpload","priority","createMultipartUpload","signPart","listParts","completeMultipartUpload","retryDelays","values","uploadPartBytes","getUploadParameters","getUploadId","cachedResult","get","data","promise","abortPromise","abort","delete","abortFileUpload","awaitedResult","uploadFile","chunks","shouldUseMultipart","uploadId","all","chunk","uploadChunk","abortOn","restoreUploadFile","uploadIdAndKey","resumeUploadFile","alreadyUploadedParts","partNumber","alreadyUploadedInfo","find","PartNumber","setAsUploaded","ETag","chunkData","getData","onProgress","onComplete","signature","body","_err$source","status","isPaused","limit","_classPrivateFieldLoo","rateLimit","_classPrivateFieldLoo2","onLine","pause","resume","_classPrivateFieldLoo3","method","fields","headers","formData","FormData","entries","_ref10","_companionCommunicationQueue","_client","_cachedTemporaryCredentials","_getTemporarySecurityCredentials","_setS3MultipartState2","_getFile2","_uploadFile","_requestSocketToken","_upload","_setCompanionHeaders","_setResumableUploadsCapability","_resetResumableCapability","for","AwsS3Multipart","uppy","_opts","_this$opts$rateLimite","_uploadFile2","_getTemporarySecurityCredentials2","cFile","setFileState","s3Multipart","client","remote","providerOptions","provider","tus","post","metadata","token","fileIDs","getFilesByIds","filesFiltered","filesToEmit","promises","isRemote","controller","AbortController","removedHandler","removedFile","resetUploaderReferences","uploadPromise","uploadRemoteFile","wrapSyncFunction","upload","setCompanionHeaders","companionHeaders","boolean","capabilities","getState","setState","resumableUploads","title","getTemporarySecurityCredentials","createSignedURL","prepareUploadParts","_ref4","presignedUrls","number","rateLimitedQueue","uploaders","uploaderEvents","uploaderSockets","setQueueRequestSocketToken","newOptions","fileID","really","remove","close","assertHost","companionUrl","filename","_ref5","_ref6","uploadIdEnc","expires","accountKey","AccessKeyId","accountSecret","SecretAccessKey","sessionToken","SessionToken","bucketName","bucket","Region","region","Key","crypto","randomUUID","_ref7","_ref8","URLSearchParams","_ref9","xhr","onabort","cleanup","setRequestHeader","responseType","timeout","ev","responseText","loaded","lengthComputable","etag","getResponseHeader","send","connectToServerSocket","_this","queuedRequest","serverToken","socket","autoOpen","onFileRemove","onFilePause","run","onPauseAll","onCancelAll","_temp","onResumeAll","onRetry","isOpen","onRetryAll","progressData","errData","uploadResp","uploadURL","cb","targetFileID","eventHandler","_this2","install","addPreProcessor","addUploader","uninstall","removePreProcessor","removeUploader","_this3","companionComm","log","getChunkSize","bytesUploaded","bytesTotal","uploader","onError","onSuccess","onPartComplete","removed","_temp2","start","VERSION","GoldenRetriever","addBlobToStores","ServiceWorkerStore","put","IndexedDBStore","removeBlobFromStores","replaceBlobInStores","handleRestoreConfirmed","currentUploads","resumeAll","restore","recoveredState","abortRestore","deleteBlobs","cancelAll","handleComplete","successful","restoreBlobs","getFiles","loadFileBlobsFromServiceWorker","loadFileBlobsFromIndexedDB","resultingArrayOfObjects","blobs","onBlobsLoaded","serviceWorker","MetaDataStore","storeName","getID","indexedDB","saveFilesStateToLocalStorage","leading","trailing","restoreState","savedState","load","savedPluginData","pluginData","getWaitingFiles","waitingFiles","progress","uploadStarted","getUploadingFiles","uploadingFiles","uploadID","filesToSave","fileToSaveEntries","filesToSaveWithoutData","fileInfo","isRestored","preview","save","list","numberOfFilesRecovered","obsoleteBlobs","updatedFiles","originalFile","updatedFileData","isGhost","_this$ServiceWorkerSt","_this$ServiceWorkerSt2","_this$IndexedDBStore","_callbacks","_publish","DefaultStore","_publish2","Set","patch","prevState","nextState","subscribe","listener","add","ThumbnailGenerator","onFileAdded","addToQueue","onCancelRequest","queue","onFileRemoved","URL","revokeObjectURL","onRestored","onAllFilesRemoved","waitUntilAllProcessed","mode","i18n","emitPreprocessCompleteForAll","queueProcessing","defaultThumbnailDimension","thumbnailType","defaultLocale","thumbnailWidth","thumbnailHeight","waitForThumbnailsBeforeUpload","lazy","i18nInit","createThumbnail","targetWidth","targetHeight","originalUrl","createObjectURL","onload","image","Image","src","orientationPromise","orientation","dimensions","getProportionalDimensions","deg","rotatedImage","translate","w","width","h","height","canvas","createElement","context","getContext","rotate","rad","scale","scaleX","scaleY","drawImage","rotateImage","quality","getImageData","toBlob","blob","toDataURL","canvasToBlob","resizeImage","img","rotation","aspect","round","ratio","maxSquare","maxW","sqrt","maxH","protect","steps","ceil","log2","sW","sH","setPreviewURL","processQueue","shift","requestThumbnail","buildResponseError","request","setTypeInBlob","_uploadBundle","_uploadFiles","_handleUpload","XHRUpload","_uploadFiles2","_uploadBundle2","_upload2","getOptions","endpoint","fieldname","fieldName","httpMethod","useFormData","bundle","responseUrlFieldName","withCredentials","getResponseData","parsedResponse","JSON","getResponseError","_","response","validateStatus","overrides","xhrUpload","addMetadata","subItem","append","createFormDataUpload","formPost","dataWithUpdatedType","createBundledUpload","createSocket","resp","_socket","_socket2","_socket3","onRetryRequest","individualCancellation","total","timer","seconds","toUpperCase","currentOpts","header","optsFromState","emitError","allSettled","parseInt","nanoid","random","optic","collect","modify","f"],"sourceRoot":""}